当前位置:  开发笔记 > 数据库 > 正文

SSRS:动态更改SQL语句

如何解决《SSRS:动态更改SQL语句》经验,为你挑选了1个好方法。

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

SELECT * FROM MyTable (NOLOCK) 
WHERE col1 = 'ABC'
AND col2 LIKE '%XYZ%'

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



1> Brannon..:

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

它应该是:

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.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有