当前位置: 代码迷 >> Sql Server >> 初学者,前台设置多选,sql server怎么办条件筛选
  详细解决方案

初学者,前台设置多选,sql server怎么办条件筛选

热度:47   发布时间:2016-04-24 09:22:13.0
菜鸟求助,前台设置多选,sql server怎么处理条件筛选?
是这样的,前台设置多个字段 的条件

是这样的,前台设置多个字段 的条件筛选,
比如产品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)
  相关解决方案