条件检查Where子句

时间:2010-08-10 10:28:49

标签: sql sql-server-2008

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

itemid是一个可以为null的参数。

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

2 个答案:

答案 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注入。

参考:Dynamic Search Conditions in T-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