【发布时间】:2014-10-09 21:16:54
【问题描述】:
在 where 子句中是否有更好的方法来执行以下类型的 OR 条件
WHERE (@TestID IS NULL OR t.[ID] = @TestID)
我遇到的问题是不同变量的 WHERE 子句中有很多这样的变量,这会导致大量数字或读取。我想要完成的是,如果参数为 NULL,则不要评估它,如果它不是 NULL,则评估它。到目前为止,我想出的唯一解决方案是将它们分解为巨大的查询,检查填充的内容并像这样定制查询:
IF @TestID IS NOT NULL
....
ELSE IF @TestID IS NULL
....
这变得极其繁琐,并且由于变量众多而难以维护。
【问题讨论】:
-
@TimSchmelter 这是一篇好文章,但是在动态 sql 案例中使用证书授予权限有更好的方法。见sommarskog.se/grantperm.html#Certificates
-
这里有一篇文章详细解释了处理这种捕获所有查询的多种方法。 sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries
标签: sql sql-server sql-server-2008 ssms