我有一个过程,其中要在WHERE子句中写入以下条件。我该怎么做。
itemid是一个可以为null的参数。
如果itemid可用,则将其添加到我的where子句中,否则不执行任何操作
答案 0 :(得分:3)
有些人使用这种技术
... 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注入。
答案 1 :(得分:2)
e.g。
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