Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 多个可选参数的sql搜索查询_Jquery_Sql_Sql Server_Search_Stored Procedures - Fatal编程技术网

Jquery 多个可选参数的sql搜索查询

Jquery 多个可选参数的sql搜索查询,jquery,sql,sql-server,search,stored-procedures,Jquery,Sql,Sql Server,Search,Stored Procedures,我正试图在我的文档归档系统上编写一个高级搜索页面的查询。我正在尝试通过多个可选参数进行搜索。我有大约5个参数,可以是空字符串或搜索字符串。我知道我不应该检查每个组合是否为字符串或空,并为每个组合创建单独的存储过程 编辑: 最终使用了: ISNULL(COALESCE(@var, a.col), '') = ISNULL(a.col, '') 您可以在WHERE子句中输入OR,如下所示: WHERE (@var1 = '' OR col1 = @var1) AND (@var2 =

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

编辑: 最终使用了:

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

您可以在WHERE子句中输入OR,如下所示:

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

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

尽管如此,我还是更喜欢用查询的核心构建一个视图,然后在几个具有特定参数的过程中使用该视图。这使得SQL可以根据需要/应该进行优化,而且我仍然可以整合查询细节。

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


更好的方法是将参数设置为可选的NULL,然后在WHERE子句中进行测试,就像空字符串一样…

我通常这样做:p

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

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

虽然此解决方案可行,但其成本非常昂贵。不要使用或。。。相反,请使用ISNULL(上面的示例)。此解决方案在所有情况下都有效。IsNull/Coalesce解决方案只能在受控环境下工作。使用Coalesce时,仍在测试列是否等于某个值。如果列中的值为NULL,则该值将不相等,并且不会返回该行。如果列值为NULL,则此解决方案将不起作用,因为无法以这种方式测试“不能为NULL”。如果该值为NULL,则该行将被过滤掉。这不是您想要的。在其中条件下调用函数会降低性能。不使用coalesce函数调用此函数,其中(@var1为null或col1=@var1),另请参见:
WHERE (@var1 IS NULL OR col1 = @var1)
AND (@var2 IS NULL OR col2 = @var2)