gpt4 book ai didi

sql-server - Azure SQL Server 中的临时表在存储过程中第二次插入时返回错误

转载 作者:行者123 更新时间:2023-12-03 06:01:40 26 4
gpt4 key购买 nike

我在 Azure SQL Server 实例内的存储过程中声明了一个临时表。

声明后

WITH temp 
(cols) AS
(SELECT * FROM goaltable
WHERE someCondition = true)

并在几个 INSERT 语句中使用它,SQL Server 在第二个 INSERT 上返回一个错误,无效的对象名称“temp”。

我是否必须在第二个 INSERT 语句之前再次声明该表,或者有更好的方法吗?

最佳答案

WITH关键字用于初始化CTE(Comman Table Expression),它不是临时表。

临时表以井号前缀###(全局临时表,谷歌搜索差异)。

CTE 的范围仅限于 CTE 初始化后的第一个语句。

WITH CTE AS
( /* Your query here */)
SELECT FROM CTE --<-- Scope of above CTE
-- it maybe select , delete, update statement here

SELECT FROM CTE --<-- this statement is out of scope
-- this will return an error

临时表

在你的情况下,如果你想创建一个临时表并在多个地方使用它,你需要做这样的事情......

SELECT * INTO #Temp 
FROM goaltable
WHERE someCondition = true

现在,这个 #Temp 表的范围是创建它的连接。您可以在此 session 中的任何位置多次选择。

例如,只要在同一连接中执行以下查询,执行时不会出现任何错误。

SELECT TOP 10 * FROM #Temp
SELECT * FROM #Temp

注意

尽管临时表的范围是您的 session ,但在使用完临时表后删除临时表是一个很好的做法。

IF OBJECT_ID('tempdb..#Temp') IS NOT NULL 
DROP TABLE #Temp

关于sql-server - Azure SQL Server 中的临时表在存储过程中第二次插入时返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28057301/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com