我正在编写一个查询来旋转动态生成列名的表元素。在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'临时表 - 这是在两个范围内访问它的唯一方法。我已经展示了一种可能适用于我的答案的方法。 –