[英]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.