[英]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.