SSRS 错误添加共享数据集

SSRS error adding shared dataset

当我将以下代码添加到我的报告存储过程中时,我无法将共享数据集添加到我的 SSRS 报告中,它给我这个错误:

Incorrect syntax near the keyword 'as'.

我添加的代码(到以前的工作程序)是:

set @sqlstring = Concat(N'INSERT INTO #TEXT_SEARCH_RESULT',
        N'(Result_Name,Count_of_tickets,HT,Created_Group)',
        N' SELECT ',@TimeDefinition,' as RESULT_NAME',
        N' ,sum(COUNT_OF_TICKETS) as COUNT_OF_TICKETS',
        N' ,sum(HT) as HT',
        N' ,''Group'' as CREATED_GROUP',
        N' from #TEXT_SEARCH_MAIN ct',
        N' where (1=1) ')
--other items that append to the string, but have no bearing on the question
set @sqlstring=concat(@sqlstring,N' group by ',@TimeDefinition)

sql 语句将数据附加到临时 table 中,其中包含上一条语句中已有的数据。
@TimeDefinition 声明为 NVARCHAR(100)
将@TimeDefinition 替换为变量中的文本(示例 cast(CREATEDDATE as date)允许添加报告
如果我从连接的字符串中删除 AS,则错误只会更改为 关键字 'by'.
附近的语法不正确 运行SSMS中的查询没有报错

这里的问题是 SSRS 无法在不提供参数的情况下确定查询的列。当使用动态 SQL 时,如果没有为一个(或多个)参数提供值,有时动态 SQL 将没有值;因此无法确定列值。举一个简单的例子:

DECLARE @SQL nvarchar(MAX);

SET @SQL = N'SELECT ' + QUOTENAME(@Col1) + N' AS Result1,' + NCHAR(10) + 
           N'       ' + QUOTENAME(@Col2) + N' AS Result2' + NCHAR(10) + 
           N'FROM MyTable;';
PRINT @SQL;
EXEC sp_executesql @SQL;

除非提供 @Col1@Col2 的值,否则 @SQL 的值将导致 NULL

当使用诸如此类的查询时,SSRS 会因此向您显示对话 window。这看起来像下面这样(取自 SSDT 2017)

您需要在此对话框中(在名为 Parameter Value 的第二列中)输入一些值,以便 SSRS 可以正确确定列定义。完成后,SSRS 将正确创建数据集。

在相关说明中,我建议不要使用 1=1。这只会增加处理时间(因为数据引擎仍然需要检查是否 1=1)并且可能导致查询分析器做出错误的选择。将类似的东西放在查询的 WHERE 子句中实际上可以被认为是非常糟糕的做法。