sql-server - SSRS : Change SQL Statement Dynamically

标签 sql-server tsql reporting-services reportingservices-2005

我在 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/

相关文章:

c# - 无法处理 System.Data.SqlTypes.SqlNullValueException

asp.net - 将 .MDF SQL Server 数据库与 ASP.NET 结合使用与使用 SQL Server

sql-server - 如何捕获错误消息 "Error Converting data type varchar to decimal"

reporting-services - 带 SSRS 的条件下拉列表

sql - SSRS 2008 - Reporting Services 网页除标题外均为空白

reporting-services - 通过 Internet Explorer 在 Report Manager 中报告损失格式的 SSRS

sql-server - SA sql server Linux docker登录失败

sql-server - 在 SELECT 语句中返回单独行中的列

sql - CASE WHEN EXIST 应该返回 1 时返回 0

sql - SQL中查找保留关键字