我正在編寫一個查詢來旋轉動態生成列名的表元素。在SQL Azure中使用臨時表
SET @query = N'SELECT STUDENT_ID, ROLL_NO, TITLE, STUDENT_NAME, EXAM_NAME, '+
@cols +
' INTO ##FINAL
FROM
(
SELECT *
FROM #AVERAGES
UNION
SELECT *
FROM #MARKS
UNION
SELECT *
FROM #GRACEMARKS
UNION
SELECT *
FROM #TOTAL
) p
PIVOT
(
MAX([MARKS])
FOR SUBJECT_ID IN
('+
@cols +')
) AS FINAL
ORDER BY STUDENT_ID ASC, DISPLAYORDER ASC, EXAM_NAME ASC;'
EXECUTE(@query)
select * from ##FINAL
該查詢在我的本地數據庫中正常工作,但由於全局臨時表不允許在那裏,因此它不適用於SQL Azure。
現在,如果我改變##FINA
L到#FINAL
在我的本地數據庫,但它給了我錯誤的
無效的對象名稱#FINAL「。
我該如何解決這個問題?
我不認爲你的具體問題可以解決,因爲你試圖構造SQL(SQL Server)不能很好地支持的東西(具有可變列數的結果集)。在一般情況下,要做到這一點,你必須在外部範圍內創建臨時表(即在'EXECUTE'之前),但是當你不知道你的列是什麼時你不能這樣做需要。 –
其實我已經嘗試過了,我創建了一個可以放入temp的列名,並將它放入@中。它不起任何作用,因爲我不能在條款中使用它。即,FOR SUBJECT_ID IN (SELECT cast(subject_id AS NVARCHAR)FROM #SUBJECT_ID_TABLE) –
不,重點是在'EXECUTE'之前創建'#Final'臨時表 - 這是在兩個範圍內訪問它的唯一方法。我已經展示了一種可能適用於我的答案的方法。 –