調試存儲的sproc可能是威脅,&我無法像我想象的那樣使用立即窗口。在Visual Studio 2005中調試存儲過程時的立即窗口
在VS 2005中調試存儲過程時是否有立即可用的窗口?
是否有任何其他方式可以在我在Stored Proc內部創建的臨時表上運行查詢?由於臨時表的範圍僅在存儲過程中進行定義。
我能創造一個調試器可視查詢,而我調試存儲的特效
PS一個TSQL的表格:我知道有更好的方法來拱您的應用程序,讓你永遠不會有在這情況,但我正在看一些遺留代碼,所以請有一些憐憫;)
調試存儲的sproc可能是威脅,&我無法像我想象的那樣使用立即窗口。在Visual Studio 2005中調試存儲過程時的立即窗口
在VS 2005中調試存儲過程時是否有立即可用的窗口?
是否有任何其他方式可以在我在Stored Proc內部創建的臨時表上運行查詢?由於臨時表的範圍僅在存儲過程中進行定義。
我能創造一個調試器可視查詢,而我調試存儲的特效
PS一個TSQL的表格:我知道有更好的方法來拱您的應用程序,讓你永遠不會有在這情況,但我正在看一些遺留代碼,所以請有一些憐憫;)
如果您存儲的特效是在oracle中,您可以使用由oracle sql developer提供的調試功能。這個工具可以讓你通過在需要的地方設置斷點來編譯和調試你的proc。如果存儲過程是用pl sql編寫的,那麼請盲目去做這件事。在我的項目中,我沒有從Visual Studio中調試存儲過程。相反,我得到了傳遞給存儲過程的輸入,轉到該工具並使用該輸入在調試模式下運行proc.AFAIK,在從VS調試時不能查詢臨時表。
我不認爲我聽說過任何可以調試SQL存儲過程的東西,就像調試「真實」的應用程序代碼一樣。 (這涵蓋了7.0,2000和2005年,但陪審團仍然在2008年)。
當我在不熟悉的存儲過程(可能是我的,在寫完它們幾個月後)上進行嚴重的調試時,我將代碼粘貼到SSMS查詢窗口中,用適當的DECLARE和SET代替參數,註釋掉有問題的語句(RETURN),並運行它。在大多數情況下,臨時表(#temp表,而不是@表變量)在運行後仍然存在。使用##搜索和替換#使它們成爲全局的,並可以從其他查詢窗口訪問,這可以提供幫助。註釋掉代碼塊並運行未註釋的部分可能非常有用。
其他一些技巧,我做了嚴重醜陋的程序(數百,甚至上千行的代碼):
添加參數@Debug,默認爲0。在過程中的相關章節中,添加「IF @Debug = 1「塊,您可以在其中打印當前變量值和/或臨時表內容。一個有用的形式可以是:
SELECT 'DebugBlock3' DataSet, * from #MyTempTable
大廈此,另一招是定義#TEMP表所示:
IF @Debug = 0 or object_id('tempdb.dbo.#MyTempTable') is null
CREATE TABLE #MyTempTable
(
ProductId int not null
,etc
)
有了這個,如果你首先創建#TEMP表中查詢窗口,然後從同一個窗口調用@Debug = 1的過程,一旦過程完成,臨時表將仍然存在,並填充任何最終內容。
當動態代碼(戰慄),我已經得到了不變設置@Debug使用值0,1的工作,和2個工作,有評論
-- Debug control: 0=do the work, 2=List out dynamic code, 1=Both
和隨後的代碼塊,如:
IF @Debug > 0
BEGIN
PRINT 'Comment about the following chunk of text'
PRINT '-----------------------------------------------------------'
PRINT @Command
END
IF @Debug < 2
EXECUTE (@Command)
是的,這是一個痛苦,並不是特別方便,但這是我隨着時間的推移。我真的不認爲你可以在SQL中進行嚴肅的調試,因爲測試當前狀態,檢查表格內容,並且在逐步執行代碼時通常會四處漫步,如果其他人正在使用該數據庫,可能會導致阻塞,死鎖或非常不一致的結果同一時間 - 我甚至不願意在我負責的任何製作中發生這種可能性。
爲了進行調試,我傾向於使用Print語句編寫存儲過程。
然後,在我執行存儲過程之前,我鉤入SqlConnections信息消息,然後對返回的消息執行Debug.Write。
對於臨時表查詢,你可以同時調試使它們的全局臨時表http://www.sqlteam.com/article/temporary-tables
這意味着你可以查詢他們的存儲過程之外,但仍然讓他們確認爲臨時表。全局臨時表命名爲##而不是#。
不幸的是,這個功能並沒有通過立即窗口實現。我不相信它已經出現在任何版本的Visual Studio中
什麼樣的存儲過程? CLR程序或TSQL程序? – Rad 2009-09-03 09:59:05
我創建了許多用C++編寫的擴展存儲過程。您需要告訴我們它的CLR,TSQL或純C++存儲過程是否會嘗試調試。 – 2009-09-07 13:37:14