sql搜索查询多个可选参数

时间:2008-12-02 13:48:01

标签: jquery sql sql-server search stored-procedures

我正在尝试在文档归档系统上为高级搜索页面编写查询。我正在尝试通过多个可选参数进行搜索。我有大约5个参数,可能是空字符串或搜索字符串。我知道我不应该检查每个字符串或为空,并为每个组合创建一个单独的存储过程。

编辑: 结束使用:

ISNULL(COALESCE(@var, a.col), '') = ISNULL(a.col, '')

6 个答案:

答案 0 :(得分:8)

您可以像这样使用COALESCE(或ISNULL):

WHERE COALESCE(@var1, col1) = col1 
AND COALESCE(@var2, col2) = col2 
AND COALESCE(@var3, col3) = col3

答案 1 :(得分:6)

我通常这样做:P

WHERE (@var1 IS NULL OR col1 = @var1)
AND (@var2 IS NULL OR col2 = @var2)

...

答案 2 :(得分:1)

您可以将OR放在WHERE子句中,如下所示:

WHERE 
   (@var1 = '' OR col1 = @var1) AND
   (@var2 = '' OR col1 = @var2) AND
   (@var3 = '' OR col1 = @var3) ...

答案 3 :(得分:1)

另一种方法是在存储过程中动态构建SQL,这将为查询生成最佳计划,并且无论如何都将创建和使用计划(2005年及以上)。

答案 4 :(得分:0)

您可以将可选参数传递给存储过程,但优化程序将根据您对该proc进行的特定调用来构建计划。 SQL Server 2005及更高版本中有一些技巧可以避免这种情况(参数嗅探,'没有编译'提示等)。

即便如此,我更喜欢使用查询的核心构建视图,然后在具有特定参数的多个过程中使用该视图。这允许SQL根据需要进行优化,我仍然可以整合查询细节。

答案 5 :(得分:0)

更好的是使参数可选为NULL,然后在WHERE子句中测试就像空字符串一样......