在 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 中的查询分析器在哪里?