我在 SSRS 2005 中有一份报告,该报告基于与此类似的查询:
SELECT * FROM MyTable (NOLOCK)
WHERE col1 = 'ABC'
AND col2 LIKE '%XYZ%'
我需要能够根据用户是否选中了复选框,在查询中动态包含 WHERE 子句的 AND 部分。基本上,这是一个动态 SQL 语句,这就是问题所在。我尝试了多种方法均无济于事。这可能吗? SSRS 2005 支持动态 SQL 吗?谢谢!
最佳答案
查尔斯几乎得到了正确的答案。
应该是:
SELECT * FROM MyTable (NOLOCK)
WHERE col1 = 'ABC'
AND (@checked = 0 OR col2 LIKE '%XYZ%')
这是 SQL 中条件谓词的经典“模式”。如果@checked = 0
,那么它将返回与谓词其余部分匹配的所有行(col1 = 'ABC'
)。 SQL Server 甚至不会处理 OR
的后半部分。
如果@checked = 1
,那么它将评估OR
的第二部分,并返回与col1 = 'ABC' AND col2 LIKE '%XYZ匹配的行%'
如果您有多个条件谓词,可以使用此方法将它们链接在一起(而 IF 和 CASE 方法很快就会变得难以管理)。
例如:
SELECT * FROM MyTable (NOLOCK)
WHERE col1 = 'ABC'
AND (@checked1 = 0 OR col2 LIKE '%XYZ%')
AND (@checked2 = 0 OR col3 LIKE '%MNO%')
不要使用动态 SQL,不要使用 IF 或 CASE。
关于sql-server - SSRS : Change SQL Statement Dynamically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/137784/