SSRS错误添加共享数据集

时间:2018-04-03 18:17:36

标签: sql-server reporting-services sql-server-2012 ssrs-2012

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

enter image description here

  

关键字'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语句将数据附加到临时表中,其中包含前一语句中已存在的数据 @TimeDefinition声明为NVARCHAR(100)
用变量中的文本替换@TimeDefinition(例如cast(CREATEDDATE as date)允许添加报告
如果我从连接字符串中删除AS,则错误只会更改为关键字'by'附近的语法不正确。
在SSMS中运行查询不会出错

1 个答案:

答案 0 :(得分:0)

这里的问题是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会为您显示一个对话窗口。这看起来像下面的内容(取自SSDT 2017) enter image description here

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

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