[英]SSRS error adding shared dataset
当我将以下代码添加到报表存储过程中时,无法将共享数据集添加到我的SSRS报表中,这给了我这个错误:
关键字“ 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'附近的Incorrect语法 。
在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将为您提供一个对话窗口。 如下所示(取自SSDT 2017)
您需要在此对话框中输入一些值(在第二列中,名为Parameter Value
),以便SSRS可以正确确定列定义。 完成此操作后,SSRS将正确创建数据集。
在相关说明中,我建议不要使用1=1
。 这只会增加处理时间(因为数据引擎仍需要检查1=1
),并且可能导致查询分析器做出错误的选择。 实际上,将类似的内容放入查询的WHERE
子句中可能被认为是非常糟糕的做法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.