2014-05-01 18 views
0

我有一個動態的PIVOT部分工作。當我不使用變量請求where子句,但只使用特定的數字時,它可以工作。動態變量存儲結果在臨時表和可變錯誤

我也希望能夠將結果存儲到臨時表中。

是否有可能在動態數據透視表中有一個where子句變量,是否可以將結果保存到臨時表中?

這裏是行不通

declare @CourseID int = 2 
DECLARE 
    @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(UnitID) 
      FROM LMS_Unit_Status where CourseID = @CourseID 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT LearnerID, ' + @cols + ' from 
      (select LearnerID,UnitID,Completed from LMS_Unit_Status where CourseID = @CourseID) as s 
      pivot 
      (
       min(Completed) 
       for UnitID in (' + @cols + ') 
      ) p' 
execute(@query); 

Msg 137, Level 15, State 2, Line 2 
Must declare the scalar variable "@CourseID". 

感謝

回答

0

我當前的查詢如果@CurseID是一個變量解析器應該知道它是一個變量,而不是一個字符串

既然你有不知道有多少個列表可以簡單地使用select into語句。

set @query = 'SELECT LearnerID, ' + @cols + ' into tempTable from 
      (select LearnerID,UnitID,Completed from LMS_Unit_Status where CourseID = ' + @CourseID + ') as s 
      pivot 
      (
       min(Completed) 
       for UnitID in (' + @cols + ') 
      ) p 
select * from tempTable 
drop table tempTable' 
execute(@query); 

乾杯!

+0

感謝@Arek - 我試過,但我得到轉換爲nvarchar值「選擇LearnerID時 轉換失敗的消息'消息245,級別16,狀態1,第12行,[CU2306]進入#UnitReport從 (選擇LearnerID,UnitID,從LMS_Unit_Status完成,其中CourseID ='到數據類型int.' – gillers322