我在我的存储过程中使用临时表#tempTable – 我用它来运行我的ASP.net报告(报告服务)
我正在做类似的事情
例如.码
SELECT * INTO #tempTable FROM Contacts WHERE ContactID < 10@H_301_7@然后我用类似的东西
SELECT o.* FROM #tempTable t INNER JOIN Orders o ON t.ContactID =o.ContactID@H_301_7@将值返回到我的报告,即存储过程的结果
我没有摆脱我的#tempTable
即我不这样做
DROP TABLE #tempTable@H_301_7@我已经读过临时表的范围只适用于存储过程 – 所以这样做是必要的 – 如果我不做上面的话我将来会遇到什么问题
解决方法
首先,在过程完成后,将删除在过程中创建的本地临时表.从
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在自己选择的时候销毁表.