【发布时间】:2017-05-09 21:05:21
【问题描述】:
我在“SQL Server Reporting Services 2012”上使用“Microsoft SQL Server Report Builder 3.0”。
从主报告 main.rdl 我调用钻取报告 detail.rdl
main.rdl 报表有一个表格,该表格的每个文本框都是可点击和钻取操作。当用户单击任何文本框时,将调用 detail.rdl 报告。传递给 detail.rdl 报告的一个参数用作 SQL 中的列名。此 SQL 获取 detail.rdl 报告所需的数据
当我对使用参数构建的 detail.rdl 报告运行 SQL 查询时,它没有显示任何错误,但也没有获取任何数据。我认为发生的情况是,由于参数的数据类型为文本,它在 SQL 中被替换为引号,这可能导致它无法获取任何数据。
当我用参数值(不带引号)替换列名后直接在 DB 上运行相同的 SQL 时,它会获取数据。
是否有任何特定的方法来传递将用作我在这里缺少的列名的参数?
我正在从报表生成器尝试的 SQL:
SELECT
table_name.column1
,table_name.column21
,table_name.column15
,table_name.column6
,table_name.column9
,table_name.column2
,table_name.column19
,@column --the value in this variable is an existing column name from table table_name
FROM
table_name
WHERE
table_name.column1 LIKE @company
AND table_name.column21 LIKE @platform
AND (@column is null OR @column = '' OR @column = 'N/A' OR @column = 'Unknown');--I want to use same variable here as well
更新: 我能够通过添加
来使 SQL 正常工作DECLARE @company varchar(10)
SET @company = ''company_name''
DECLARE @platform varchar(10)
SET @platform = ''platform_name''
行后
SET @SQL =
'
不幸的是,“Microsoft SQL Server Report Builder 3.0”无法执行此 SQL,因为它要求变量 @SQL 的值,即使它的值已定义。我确实尝试在同一行中声明和设置@SQL 的值:
DECLARE @SQL varchar(5000) = 'DECLARE @company varchar(10)
但是报告生成器仍然要求@SQL 的值并且报告没有运行:-(
【问题讨论】:
-
问题是我的错。参数名称区分大小写,因此请确保它在任何地方都读取“@SQL”,最后一条语句将其作为“@sql”。SSRS 可能还在设计器中添加了一个“@sql”参数,如果这样你可以安全地删除它.
标签: sql sql-server ssrs-2012 reportbuilder3.0