是这样的,前台设置多个字段 的条件
是这样的,前台设置多个字段 的条件筛选,
比如产品A 的颜色、材料、功能等,可同时他每个条件是可以多选的,比如颜色可以选黄色、红色一起选,
材料可以金属塑料什么的也多选,如果不选就默认这个字段的所有值都要(传空值),设计的前台说他把每个选项都传一个参数给我,每个参数不同选择之间以逗号分开,比如颜色如果选红色和黄色他就传@color='黄色,红色',每个参数不限制多选的个数
问题是我在做筛选查询时where 部分,条件怎么写
表 product (ProductID,productName,color,material,function)
------解决思路----------------------
这样的话可以选择动态语句,条件的拼接也比较灵活
------解决思路----------------------
最好是动态的拼接,拼接这个动作放在程序的逻辑中,这事儿就别麻烦数据库了,毕竟程序处理起来更专业。
------解决思路----------------------
用动态SQL实现,参考如下例子,
-- 建存储过程
create proc [存储过程名]
(@color varchar(100) -- 颜色参数
)
as
begin
set nocount on
declare @tsql varchar(6000)
select @tsql='select [字段列表] '
+' from product '
+' where 1=1 '
+case when @color<>'' then 'and color in('''+replace(@color,',',''',''')+''') '
else '' end
exec(@tsql)
end
-- 测试1 查询所有值(传空值)
exec [存储过程名] @color=''
/*
执行的SQL语句是 select [字段列表] from product where 1=1
*/
-- 测试2 查询红色和黄色
exec [存储过程名] @color='黄色,红色'
/*
执行的SQL语句是 select [字段列表] from product where 1=1 and color in('黄色','红色')
*/
------解决思路----------------------
数据库只管高效的查询存储数据
------解决思路----------------------
DECLARE @sql nvarchar(max)
SET @sql = ''
IF @color <> ''
SET @sql = @sql+' AND color IN ('''+REPLACE(@color,',',''',''')+''')'
IF @material <> ''
SET @sql = @sql+' AND material IN ('''+REPLACE(@material,',',''',''')+''')'
IF @function <> ''
SET @sql = @sql+' AND function IN ('''+REPLACE(@function,',',''',''')+''')'
SET @sql = 'SELECT * FROM product' + STUFF(@sql,1,4,' WHERE')
--PRINT @sql
EXEC(@sql)