sql搜索查询多个可选参数

问题描述 投票:0回答:6

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

编辑: 最终使用:

ISNULL(COALESCE(@var, a.col), '') = ISNULL(a.col, '')
sql sql-server search stored-procedures
6个回答
8
投票

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

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

6
投票

我通常这样做:P

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

...


1
投票

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

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

1
投票

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


0
投票

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.