SQL Server查询 - 如何为表编写多项搜索

时间:2015-07-25 18:50:59

标签: sql sql-server sql-server-2008

我必须为这种情况编写查询:Product表&在UI方面,存在多个过滤条件,例如颜色,名称,产品编号,尺寸等,每个过滤器都有多选设施。使用可以选择此过滤器的任意组合,也不能选择过滤器。

如何为此方案编写SQL查询?

这就是我的尝试:

-- these variables contains comma delimited string of multiple values
declare @color varchar(max), 
        @pnumber varchar(max),
        @name varchar(max),
        @size varchar(max)

        @searchFilter table
        (
            searchType varchar(max)
            ID int,
            value varchar(max)
        )

-- I am parsing these filter values & putting in a table variable @searchFilter

Select * 
from Product
where 
     (@color is null or Color in (select value from @searchFilter 
                                  where searchType = 'Color'))
     and
     (@name is null or Name in (select value from @searchFilter 
                                where searchType = 'Name'))
     and
     (@size is null or Size in (select value from @searchFilter 
                                where searchType = 'Size'))
     and
     (@pnumber is null or ProductNumber in (select value from @searchFilter 
                                            where searchType = 'PNumber'))

我收到错误

  

转换无法将值'xx'转换为数据类型int

  1. 如何有效地为这种情况编写查询?
  2. 上述查询是否是编写此代码的正确方法?

1 个答案:

答案 0 :(得分:1)

您的错误似乎是由于其中一个搜索字段(可能SizeProductNumber)为int,而value字段来自@searchFilter表是varchar(MAX)。