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

时间:2020-03-06 14:38:56  来源:igfitidea点击:

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

谢谢
维诺德·T

解决方案

编辑存储过程,以便在运行时从临时表中临时选择*(可能在另一个表或者文件中,或者仅在输出窗格中)。

然后,我们可以将其改回。如果我们不喜欢原始过程,则将其复制并编辑副本。

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

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

本地临时表

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

全局临时表

  • 全局临时表的前缀以双数字符号(##)作为其名称的第一个字符,例如(## table_name)。
  • 全局临时表对所有会话可见,或者可以说它们在创建后对所有用户可见。
  • 当所有引用该表的用户都与Microsoft SQL Server断开连接时,它们将被删除。

这对我有帮助。

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