查看从存储过程创建的临时表

时间:2008-09-24 08:24:01

标签: sql sql-server stored-procedures

我在SQL 2005中有一个存储过程。存储过程实际上是在SP的开头创建临时表并在最后删除它。我现在在VS 2005中调试SP。在SP之间,我想知道临时表中的内容。任何人都可以在运行时帮助查看临时表的内容。

由于 Vinod T

6 个答案:

答案 0 :(得分:14)

有几种临时表,我认为你可以使用SP在使用后没有丢弃的表。只要确保你没有两次调用相同的SP,否则你会在尝试创建现有表时遇到错误。或者只是在看到它的内容后删除临时表。因此,不要使用表变量(@table),而只需使用#table##table


来自http://arplis.com/temporary-tables-in-microsoft-sql-server/

本地临时表

  • 本地临时表前缀带有单个数字符号(#)作为其名称的第一个字符,如(#table_name)。
  • 本地临时表仅在当前会话中可见,或者您可以说它们仅对用户的当前连接可见。 当用户断开与Microsoft SQL Server实例的连接时,将删除它们。

全球临时表

  • 全局临时表前缀带有双号(##)作为其名称的第一个字符,如(## table_name)。
  • 全局临时表对所有会话都可见,或者您可以说任何用户在创建后都可以看到它们。
  • 当引用该表的所有用户与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