我有一個非常大的存儲過程,它調用其他存儲過程並將結果應用於臨時表。查詢存儲過程中的臨時表,同時在SQL調試中2008管理工作室
我在SQL 2008 Management Studio中進行調試,可以使用監視窗口來查詢本地參數,但是如何在調試時查詢臨時表?
如果不可能有其他方法嗎?我已閱讀有關使用表變量,而不是有可能查詢這些?如果是的話,我會如何做到這一點?
我有一個非常大的存儲過程,它調用其他存儲過程並將結果應用於臨時表。查詢存儲過程中的臨時表,同時在SQL調試中2008管理工作室
我在SQL 2008 Management Studio中進行調試,可以使用監視窗口來查詢本地參數,但是如何在調試時查詢臨時表?
如果不可能有其他方法嗎?我已閱讀有關使用表變量,而不是有可能查詢這些?如果是的話,我會如何做到這一點?
使用全局臨時表,即雙哈希值。
insert into ##temp select ...
調試時,你可以在某些時候暫停SP,而在另一個查詢窗口,將##臺可供查詢。
select * from ##temp
單個哈希表(#tmp)是特定於會話的,並且僅在會話中可見。
根本不下降臨時表或接近交易
如
select * into #temp from myTable
select * from #temp
另一種方法是在您的存儲過程中使用一個變量,以允許進行調試。
我使用了一個名爲@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
我建立a procedure它將顯示一個臨時表的從另一個數據庫連接的內容。 (這對普通查詢是不可能的)。 請注意,它使用DBCC默認跟蹤來訪問數據,因此只能用於調試目的。
This works great並且它不需要修改現有的存儲過程!如果只有我可以upvote 10倍! – Colin 2014-07-16 20:00:14
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