代码之家  ›  专栏  ›  技术社区  ›  SeanC

SSRS添加共享数据集时出错

  •  0
  • SeanC  · 技术社区  · 6 年前

    当我将以下代码添加到报表存储过程中时,我无法将共享数据集添加到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 回复  |  直到 6 年前
        1
  •  0
  •   Thom A    6 年前

    这里的问题是,如果没有提供参数,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将为您提供一个对话窗口。该图如下所示(摘自2017年SSDT) enter image description here

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

    另一方面,我建议反对使用 1=1 。这只会增加处理时间(因为数据引擎仍需要检查 1=1 )并可能导致查询分析器做出错误的选择。实际上,在查询的 WHERE 条款