我有一个非常大的存储过程,它调用其他存储过程并将结果应用到临时表中。
我在SQL 2008 Management Studio中进行调试,可以使用监视窗口查询本地参数,但是如何在调试时查询临时表?
如果不可能有替代方法吗?我已经阅读过有关使用表变量的信息,是否可以查询这些变量?如果是这样,我该怎么做?
答案 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