繁体   English   中英

条件检入Where子句

[英]Conditional Check in Where clause

我有一个在WHERE子句中写入以下条件的过程。 我怎么做。

itemid是可以为null的参数。

如果itemid可用,则将其添加到我的where子句中,否则不执行任何操作

有些人使用这种技术

... WHERE @itemid IS NULL OR tbl.itemid = @itemid

它保证了您永远不会在itemid列上获得索引查找。

如果表很大,则更好的方法是将查询分为2种情况

IF(@itemid IS NULL)
  SELECT foo FROM bar
ELSE
  SELECT foo FROM bar WHERE itemid = @itemid

如果组合的数量太大,则可以考虑使用动态SQL。 确保首先了解SQL注入。

参考: T-SQL中的动态搜索条件

例如

SELECT Something
FROM SomeTable
WHERE (@MyParam IS NULL OR SomeField = @MyParam)
    AND AnotherField = 1

您将需要在特定的方案中对此进行性能测试。 如果这是一个简单的查询,即没有很多条件参数,则可能需要尝试以下方法以提高性能:

IF ( @MyParam IS NULL )
    SELECT Something
    FROM SomeTable
    WHERE AnotherField = 1
ELSE
    SELECT Something
    FROM SomeTable
    WHERE SomeField = @MyParam 
        AND AnotherField = 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM