6

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

谢谢维诺德

4

6 回答 6

14

临时表有几种,我想你可以使用SP使用后没有删除的表。只要确保你没有调用同一个 SP 两次,否则你会在尝试创建现有表时出错。或者在看到它的内容后直接删除临时表。因此,不要使用表变量 ( @table),只需使用#tableor##table


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

本地临时表

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

全局临时表

  • 全局临时表前缀以双数字符号 (##) 作为其名称的第一个字符,如 (##table_name)。
  • 全局临时表对所有会话可见,或者您可以说它们在创建后对任何用户可见。
  • 当所有引用该表的用户与 Microsoft SQL Server 断开连接时,它们将被删除。
于 2008-09-24T08:31:59.527 回答
7

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

然后,您可以稍后将其更改回来。如果您不能弄乱原始程序,请复制并编辑副本。

于 2008-09-24T08:25:20.807 回答
6

我构建了一些存储过程,允许您查询在另一个会话中创建的临时表的内容。

请参阅github 上的sp_select项目。

exec sp_select 'tempdb..#temp'无论从哪个会话运行,都可以显示表格的内容。

于 2011-04-20T14:40:25.457 回答
3

底线:默认的 Visual Studio Microsoft 调试器与正在执行和调试的 SQL 代码不在同一个会话中。

因此,您只能通过将 #temp 表切换到全局 ##temp 表或永久表或您最喜欢跨会话工作的任何技术来查看它们。

注意:这与普通语言调试器非常不同......我怀疑微软故意保持这种方式......几十年前我见过第三方 SQL 调试器工具没有这个问题。

调试器不能与您的 SQL 代码在同一个会话中没有充分的技术原因,因此允许您检查所有生成的结构,包括 #temp 表。

于 2012-01-03T22:27:22.667 回答
1

这对我有帮助。

SELECT * FROM #Name

USE [TEMPDB]
GO

SELECT * FROM syscolumns 
   WHERE id = ( SELECT id FROM sysobjects WHERE [Name] LIKE '#Name%')

这给出了所有临时表的详细信息

于 2008-09-24T08:42:21.657 回答
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
于 2008-09-24T09:00:08.943 回答