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