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

时间:2011-01-22 16:16:58

标签: sql debugging stored-procedures

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

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

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

4 个答案:

答案 0 :(得分:14)

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

insert into ##temp select ...

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

select * from ##temp

单个哈希表(#tmp)是特定于会话的,只能从会话中看到。

答案 1 :(得分:14)

我构建了a procedure,它将显示来自另一个数据库连接的临时表的内容。 (普通查询无法实现)。 请注意,它使用DBCC PAGE&用于访问数据的默认跟踪,因此仅用于调试目的。

答案 2 :(得分:1)

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

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

可以像这样工作

ALTER PROCEDURE [dbo]。[usp_someProc]

@some_Var VARCHAR(15)='AUTO',

@debug_Out BIT = 0

BEGIN

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

END

执行此操作的好处是,当您的代码启动存储过程时,默认情况下不显示这些调试节。当你想调试时,你只需传入调试变量。

  

EXEC usp_someProc @debug_Out = 1

答案 3 :(得分:0)

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

例如

select * into #temp from myTable

select * from #temp