可以使用参数来引用 select 语句中的列吗?
Can you use a parameter to reference a column in a select statement?
我正在尝试根据参数引用 table 列。我的 where 子句的最后一行是
'GRAD_' +LEFT(@REPORTING_DATE-20000,4) LIKE '%' + @PROGRAM + '%'
我希望我的代码看起来像 GRAD_2018 LIKE '%BIOL%'
,但是当我 运行 代码时,我在结果集中得到一个“0”,我知道我应该得到 18。
下面是我的示例代码
DECLARE
@REPORTING_DATE INT,
@PROGRAM VARCHAR(4)
SET @REPORTING_DATE = '20201101'
SET @PROGRAM = 'BIOL'
SELECT COUNT(ID)
FROM PROGRAM_DATA
WHERE PROGRAM LIKE '%' + @PROGRAM + '%' AND REPORT_DATE IN (@REPORTING_DATE-60000) AND
'GRAD_' +LEFT(@REPORTING_DATE-20000,4) LIKE '%' + @PROGRAM + '%'
我正在使用 MSSQL 和 SSRS。
很遗憾,您不能引用这样的字段。您需要使用动态 SQL 来执行此操作。
您将 SQL 构建为一个字符串,然后执行它。
DECLARE @SQL VARCHAR(8000)
SET @SQL ='
SELECT COUNT(ID)
FROM PROGRAM_DATA
WHERE @PROGRAM LIKE ''%' + @PROGRAM + '%''
AND REPORT_DATE IN (''' + @REPORTING_DATE-60000 + ''')
AND GRAD_' + LEFT(@REPORTING_DATE-20000,4) + ' LIKE ''%''' + @PROGRAM + '''%''
'
EXEC(@SQL);
在 SSRS 中执行此操作的另一种方法是从表达式创建数据集。
在这个例子中,我假设您确实想要传递报告参数中的变量值。
创建参数来保存两个变量,称为 pReportDate
和 pProgram
。
在数据集属性中,单击针对查询 [fx]
的表达式按钮。
确保包含等号并将整个 sql 语句置于引号中,例如。
="
SELECT COUNT(ID)
FROM PROGRAM_DATA
WHERE PROGRAM LIKE '%" & Parameters!pProgram.Value & "%' AND REPORT_DATE IN (" & Parameters!pReportDate.Value & "-60000) AND
'GRAD_' +LEFT(&" Parameters!pReportDate.Value &"-20000,4) LIKE '%" & Parameters!pProgram.Value & "%'"
我还假设 @PROGRAM 是您 where 子句第一部分中的错字。
这种方法的缺点是您可能必须手动将所有查询字段添加到数据集中,因为 SSRS 可能无法自动检测到它们。
再想一想...由于 table 通常具有固定数量的列,您是否考虑过编写 where 子句以简单地用 'and' 或 [= 拼出所有列13=] 适用于您的情况?
我正在尝试根据参数引用 table 列。我的 where 子句的最后一行是
'GRAD_' +LEFT(@REPORTING_DATE-20000,4) LIKE '%' + @PROGRAM + '%'
我希望我的代码看起来像 GRAD_2018 LIKE '%BIOL%'
,但是当我 运行 代码时,我在结果集中得到一个“0”,我知道我应该得到 18。
下面是我的示例代码
DECLARE
@REPORTING_DATE INT,
@PROGRAM VARCHAR(4)
SET @REPORTING_DATE = '20201101'
SET @PROGRAM = 'BIOL'
SELECT COUNT(ID)
FROM PROGRAM_DATA
WHERE PROGRAM LIKE '%' + @PROGRAM + '%' AND REPORT_DATE IN (@REPORTING_DATE-60000) AND
'GRAD_' +LEFT(@REPORTING_DATE-20000,4) LIKE '%' + @PROGRAM + '%'
我正在使用 MSSQL 和 SSRS。
很遗憾,您不能引用这样的字段。您需要使用动态 SQL 来执行此操作。
您将 SQL 构建为一个字符串,然后执行它。
DECLARE @SQL VARCHAR(8000)
SET @SQL ='
SELECT COUNT(ID)
FROM PROGRAM_DATA
WHERE @PROGRAM LIKE ''%' + @PROGRAM + '%''
AND REPORT_DATE IN (''' + @REPORTING_DATE-60000 + ''')
AND GRAD_' + LEFT(@REPORTING_DATE-20000,4) + ' LIKE ''%''' + @PROGRAM + '''%''
'
EXEC(@SQL);
在 SSRS 中执行此操作的另一种方法是从表达式创建数据集。
在这个例子中,我假设您确实想要传递报告参数中的变量值。
创建参数来保存两个变量,称为 pReportDate
和 pProgram
。
在数据集属性中,单击针对查询 [fx]
的表达式按钮。
确保包含等号并将整个 sql 语句置于引号中,例如。
="
SELECT COUNT(ID)
FROM PROGRAM_DATA
WHERE PROGRAM LIKE '%" & Parameters!pProgram.Value & "%' AND REPORT_DATE IN (" & Parameters!pReportDate.Value & "-60000) AND
'GRAD_' +LEFT(&" Parameters!pReportDate.Value &"-20000,4) LIKE '%" & Parameters!pProgram.Value & "%'"
我还假设 @PROGRAM 是您 where 子句第一部分中的错字。
这种方法的缺点是您可能必须手动将所有查询字段添加到数据集中,因为 SSRS 可能无法自动检测到它们。
再想一想...由于 table 通常具有固定数量的列,您是否考虑过编写 where 子句以简单地用 'and' 或 [= 拼出所有列13=] 适用于您的情况?