2011-01-22 49 views
17

我有一個非常大的存儲過程,它調用其他存儲過程並將結果應用於臨時表。查詢存儲過程中的臨時表,同時在SQL調試中2008管理工作室

我在SQL 2008 Management Studio中進行調試,可以使用監視窗口來查詢本地參數,但是如何在調試時查詢臨時表?

如果不可能有其他方法嗎?我已閱讀有關使用表變量,而不是有可能查詢這些?如果是的話,我會如何做到這一點?

+0

Dup of http://stackoverflow.com/questions/1900857/how-to-see-the-values-of-a-table-variable-at-debug-time-in-t-sql – Schultz9999 2012-09-11 21:15:27

回答

11

使用全局臨時表,即雙哈希值。

insert into ##temp select ... 

調試時,你可以在某些時候暫停SP,而在另一個查詢窗口,將##臺可供查詢。

select * from ##temp 

單個哈希表(#tmp)是特定於會話的,並且僅在會話中可見。

0

根本不下降臨時表或接近交易

select * into #temp from myTable 

select * from #temp 
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

11

我建立a procedure它將顯示一個臨時表的從另一個數據庫連接的內容。 (這對普通查詢是不可能的)。 請注意,它使用DBCC默認跟蹤來訪問數據,因此只能用於調試目的。

+1

This works great並且它不需要修改現有的存儲過程!如果只有我可以upvote 10倍! – Colin 2014-07-16 20:00:14

相關問題