gpt4 book ai didi

sql - 临时表范围?

转载 作者:行者123 更新时间:2023-12-04 05:05:18 25 4
gpt4 key购买 nike

我在我的存储过程中使用临时表 #tempTable - 我用来运行我的 ASP.net 报告(报告服务)

我正在做类似的事情

例如。代码

SELECT * INTO #tempTable FROM Contacts WHERE ContactID < 10

然后我使用类似的东西
SELECT o.* FROM #tempTable t INNER JOIN Orders o ON t.ContactID =o.ContactID

将值返回到我的报告,即存储过程的结果

我没有摆脱我的#tempTable

即我不做
DROP TABLE #tempTable

我已经读过临时表的范围仅适用于存储过程 - 因此执行上述操作是必要的 - 如果我不执行上述操作,我将来会遇到什么问题

最佳答案

首先,一旦过程完成,在过程中创建的本地临时表将被删除。来自 BOL on Create Table :

A local temporary table created in a stored procedure is dropped automatically when the stored procedure is finished. The table can be referenced by any nested stored procedures executed by the stored procedure that created the table. The table cannot be referenced by the process that called the stored procedure that created the table.



如果您的数据访问代码正确打开连接、调用存储过程然后关闭连接,则在该过程中创建的临时表被有效销毁。

我说“有效”是为了提出另一点。我不建议在您的程序结束时删除临时表,尽管我会在创建临时表之前添加一个检查,并在存在时删除它(例如 if object_id('tempdb..#Foo') is not null )。反对在最后删除临时表的论点是,通过调用 Drop 语句,您将迫使 SQL Server 在等待过程结束的同时消耗资源来销毁该表。相反,如果您让它超出范围,您的过程会立即结束,并且您让 SQL Server 在它自己选择的时间销毁该表。

关于sql - 临时表范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3331807/

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