我有一个在SQL 2005中的存储过程。存储过程实际上是在SP开始时创建临时表,并在结束时删除它。我现在正在VS 2005中调试SP。在SP之间,我想知道临时表的内容。有人可以帮忙在运行时查看临时表的内容吗?
谢谢。 Vinod T
谢谢。 Vinod T
有几种临时表,我认为你可以使用在存储过程使用后不会被删除的表。只需确保不要调用相同的存储过程两次,否则将出现试图创建已存在表的错误。或者在查看其内容后删除临时表。因此,不要使用表变量(@table
),而是使用#table
或##table
来源:http://arplis.com/temporary-tables-in-microsoft-sql-server/:
编辑存储过程以在运行时暂时从临时表中选择 *(可能是到另一个表或文件,或仅到输出窗格)。
然后您可以稍后将其改回来。如果无法更改原始过程,请复制它并编辑副本。
我创建了一些存储过程,可以让您查询在另一个会话中创建的临时表的内容。
请查看GitHub上的sp_select项目。
无论在哪个会话中运行exec sp_select 'tempdb..#temp'
,都可以显示表的内容。
底线是:默认的Visual Studio Microsoft调试器与正在执行和调试的SQL代码不在同一会话中。
因此,您只能通过将它们切换为全局##temp表或永久表或任何跨会话工作的最佳技术来查看#temp表。
注意:这与普通语言调试器非常不同……我怀疑Microsoft故意保持这种方式……几十年前就有第三方SQL调试工具没有这个问题。
没有好的技术原因,为什么调试器不能在与SQL代码相同的会话中,从而允许您检查所有生成的结构,包括#temp表。
这对我很有帮助。
SELECT * FROM #Name
USE [TEMPDB]
GO
SELECT * FROM syscolumns
WHERE id = ( SELECT id FROM sysobjects WHERE [Name] LIKE '#Name%')
这将提供所有临时表的详细信息
关于之前建议将数据放入永久表中的进一步扩展,你可以尝试以下方法:
-- Get rid of the table if it already exists
if object_id('TempData') is not null
drop table TempData
select * into TempData from #TempTable