SSRS:动态更改SQL语句

λ J*_*kas 5 t-sql sql-server reportingservices-2005 reporting-services

我在SSRS 2005中有一个基于与此类似的查询的报告:

SELECT * FROM MyTable (NOLOCK) 
WHERE col1 = 'ABC'
AND col2 LIKE '%XYZ%'
Run Code Online (Sandbox Code Playgroud)

我需要能够根据用户是否选中了复选框,在查询中动态包含WHERE子句的AND部分.基本上,这是一个动态SQL语句,这就是问题所在.我试过几种方法都无济于事.这可能吗?SSRS 2005是否支持动态SQL?谢谢!

Bra*_*non 14

查尔斯几乎得到了正确答案.

它应该是:

SELECT * FROM MyTable (NOLOCK) 
WHERE col1 = 'ABC'
   AND (@checked = 0 OR col2 LIKE '%XYZ%')
Run Code Online (Sandbox Code Playgroud)

对于条件谓词,这是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%')
Run Code Online (Sandbox Code Playgroud)

不要使用动态SQL,不要使用IF或CASE.