在 SQL 2008 Management Studio 中调试时查询存储过程中的临时表

Posted

技术标签:

【中文标题】在 SQL 2008 Management Studio 中调试时查询存储过程中的临时表【英文标题】:Query temp table in stored proc whilst debugging in SQL 2008 Management Studio 【发布时间】:2011-01-22 16:16:57 【问题描述】:

我有一个非常大的存储过程,它调用其他存储过程并将结果应用到临时表中。

我在 SQL 2008 Management Studio 中进行调试,可以使用监视窗口查询本地参数,但如何在调试时查询临时表?

如果不可能,是否有替代方法?我已经阅读了有关使用表变量的信息,是否可以查询这些?如果是这样,我该怎么做?

【问题讨论】:

复制***.com/questions/1900857/… 【参考方案1】:

使用全局临时表,即使用双哈希。

insert into ##temp select ...

在调试时,您可以暂停SP,在另一个查询窗口中,##表可供查询。

select * from ##temp

单个哈希表 (#tmp) 是特定于会话的,并且仅在会话中可见。

【讨论】:

【参考方案2】:

我构建了a procedure,它将显示来自另一个数据库连接的临时表的内容。 (这在普通查询中是不可能的)。 请注意,它使用 DBCC PAGE 和默认跟踪来访问数据,因此仅将其用于调试目的。

【讨论】:

这很好用,而且不需要修改现有的存储过程!如果我能投票 10 倍就好了! 这是最好的答案,如果您拥有添加这些帮助程序并在 Master db 中运行的完全权限【参考方案3】:

另一种方法是在您的存储过程中使用一个允许动态调试的变量。

我使用了一个名为@debug_out (BIT) 的变量。

像这样工作

改变程序 [dbo].[usp_someProc]

@some_Var VARCHAR(15) = 'AUTO',

@debug_Out BIT = 0

开始

  IF @debug_Out = 1
       BEGIN
            PRINT('THIS IS MY TABLE');
            SELECT * FROM dbo.myTable;
       END ................ 

结束

这样做的好处是当您的代码启动存储过程时,默认情况下不显示这些调试部分。当你想调试时,你只需传入你的调试变量。

执行 usp_someProc @debug_Out = 1

【讨论】:

【参考方案4】:

不要删除临时表或关闭事务

例如

select * into #temp from myTable

select * from #temp

【讨论】:

以上是关于在 SQL 2008 Management Studio 中调试时查询存储过程中的临时表的主要内容,如果未能解决你的问题,请参考以下文章

无法在 SQL Management Studio 2008 中更改服务器类型

SQL Server 2008 Management Studio 的缺失索引功能

在 SQL 2008 Management Studio 中调试时查询存储过程中的临时表

SQL Server Management Studio 2008 R2 中的查询分析器在哪里?

从 SQL Server Management Studio 2008 运行 SSIS 包

没有 SQL Management Studio 的远程 SQL Server 2008 的连接字符串