我的sp的一部分包含以下代码。代码在我的本地sql数据库中成功执行。但是当我在sql azure中运行它时会出错:
“此版本的SQL Server不支持全局临时对象。”
如何更改此查询以使其在azure中工作。
SET @query = N'SELECT STUDENT_ID, ROLL_NO, TITLE, STUDENT_NAME, EXAM_NAME, '+
@cols +
' INTO ##FINAL
FROM
(
SELECT ROLL_NO, TITLE, STUDENT_ID, SUBJECT_ID, STUDENT_NAME, EXAM_NAME, DISPLAYORDER, MARKS
FROM #AVERAGES
UNION
SELECT ROLL_NO, TITLE, STUDENT_ID, SUBJECT_ID, STUDENT_NAME, EXAM_NAME, DISPLAYORDER, MARKS
FROM #MARKS
UNION
SELECT ROLL_NO, TITLE, STUDENT_ID, SUBJECT_ID, STUDENT_NAME, EXAM_NAME, DISPLAYORDER, MARKS
FROM #GRACEMARKS
UNION
SELECT ROLL_NO, TITLE, STUDENT_ID, SUBJECT_ID, STUDENT_NAME, EXAM_NAME, DISPLAYORDER, MARKS
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)
答案 0 :(得分:1)
迟到总比没有好。 Database Scoped Global Temporary Tables in public preview for Azure SQL DB:
与SQL Server的全局临时表类似,前缀为## table_name的表,Azure SQL DB的全局临时表存储在tempdb中,并遵循相同的语义。 但是,它们不是在服务器上的所有数据库之间共享,而是作用于特定数据库,并在同一数据库中的所有用户会话之间共享。来自其他Azure SQL数据库的用户会话无法访问全局作为连接到给定数据库的运行会话的一部分创建的临时表。任何用户都可以创建全局临时对象。
CREATE TABLE ##test ( a int, b int); INSERT INTO ##test values (1,1);
来自MSDN CREATE TABLE
:
数据库作用域全局临时表(Azure SQL数据库)
SQL Server的全局临时表(使用##表名称启动)存储在tempdb中,并在整个SQL Server实例的所有用户会话之间共享。有关SQL表类型的信息,请参阅上面有关创建表的部分。
Azure SQL数据库支持全局临时表,这些表也存储在tempdb中并作用于数据库级。这意味着在同一Azure SQL数据库中为所有用户的会话共享全局临时表。来自其他Azure SQL数据库的用户会话无法访问全局临时表。
Azure SQL DB的全局临时表遵循SQL Server用于临时表的相同语法和语义。同样,全局临时存储过程也限定在Azure SQL DB中的数据库级别。 Azure SQL数据库也支持本地临时表(以#表名称启动),并遵循SQL Server使用的相同语法和语义。