微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql – 临时表范围?

我在我的存储过程中使用临时表#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.

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

我说“有效地”提出另一点.我不建议在程序结束时删除临时表,尽管我会在创建临时表之前添加一个检查,如果存在则删除它(例如,如果object_id(‘tempdb .. #Foo’)不为空).反对在最后删除临时表的论点是,通过调用Drop语句,您迫使sql Server在等待程序结束时花费资源来销毁表.相反,如果你让它超出范围,你的程序立即结束,你让sql Server在自己选择的时候销毁表.

原文地址:https://www.jb51.cc/mssql/77990.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐