可以使用参数来引用 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 中执行此操作的另一种方法是从表达式创建数据集。

在这个例子中,我假设您确实想要传递报告参数中的变量值。

创建参数来保存两个变量,称为 pReportDatepProgram

在数据集属性中,单击针对查询 [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=] 适用于您的情况?