我在SQL 2005中有一个存储过程。存储过程实际上是在SP开始时创建临时表并在最后删除它。我现在在 VS 2005 中调试 SP。在 SP 之间,我想知道临时表中的内容。任何人都可以帮助在运行时查看临时表的内容。
谢谢维诺德
我在SQL 2005中有一个存储过程。存储过程实际上是在SP开始时创建临时表并在最后删除它。我现在在 VS 2005 中调试 SP。在 SP 之间,我想知道临时表中的内容。任何人都可以帮助在运行时查看临时表的内容。
谢谢维诺德
临时表有几种,我想你可以使用SP使用后没有删除的表。只要确保你没有调用同一个 SP 两次,否则你会在尝试创建现有表时出错。或者在看到它的内容后直接删除临时表。因此,不要使用表变量 ( @table
),只需使用#table
or##table
从http://arplis.com/temporary-tables-in-microsoft-sql-server/:
编辑存储过程以在运行时从临时表中临时选择 *(可能到另一个表或文件中,或者只是到输出窗格中)..?
然后,您可以稍后将其更改回来。如果您不能弄乱原始程序,请复制并编辑副本。
我构建了一些存储过程,允许您查询在另一个会话中创建的临时表的内容。
请参阅github 上的sp_select项目。
exec sp_select 'tempdb..#temp'
无论从哪个会话运行,都可以显示表格的内容。
底线:默认的 Visual Studio Microsoft 调试器与正在执行和调试的 SQL 代码不在同一个会话中。
因此,您只能通过将 #temp 表切换到全局 ##temp 表或永久表或您最喜欢跨会话工作的任何技术来查看它们。
注意:这与普通语言调试器非常不同......我怀疑微软故意保持这种方式......几十年前我见过第三方 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