2011-09-30 152 views

回答

0

您可以嘗試Sql Profiler,它不會允許像「在這一點上打破」經典的調試,但給你約非常詳細的信息是什麼正在進行查詢/ SP執行的每一步。

不幸的是,微軟並沒有提供它與Express Edition版本的Sql Server。 但是:)有一個很好的(相對而言,因爲它沒有提供很多過濾標準,存在於微軟的那個過濾標準中),而且是免費的 - SQL Server 2005/2008 Express Profiler

+0

不是一回事。設置調試的重點是分成單獨的行和查看變量值等。我只是自己使用'PRINT'語句,但可以使其工作。 –

+0

@Martin Smith:你說得對,這是一個分析器而不是經典的調試器,但它在開發和調試時非常有幫助(我從來沒有使用過調試器,即使對於複雜的Db解決方案,總是足以使用Sql Profiler (坦率地說,微軟的一個)) – sll

+0

是的,內置的調試器不值得從我記憶中打擾,IIRC你不能做你希望能夠在'C#'中調試的東西 - 就像看到當前的值表變量中的行。 –

2

我發現SQL Managment Studio中的調試器不可靠,因爲它依賴於在數據庫服務器上擁有正確的權限,而這些權限並不總是可用的。

我使用的一種替代方法是將存儲的proc轉換爲長查詢。我首先將任何參數移動到變量聲明並設置它們的值。對於以下示例的

ALTER PROCEDURE [dbo].[USP_ConvertFinancials] (@EffectiveDate datetime, @UpdatedBy nvarchar(100)) 
AS 
BEGIN 

    DECLARE @PreviousBusinessDay datetime 

將成爲

DECLARE @Value int, 
     , @EffectiveDate datetime = '01-Jan-2011 
     , @UpdatedBy nvarchar(100) = 'System' 

這讓我跑從頂部開始在存儲過程中的查詢。

SELECT @Value 

我也可以註釋掉INSERT-SELECT語句的INSERT部分看什麼:當我通過查詢下移,我可以通過簡單地選擇它們並重新運行從上查詢檢查變量的值正被插入到表格和表格變量中。

使用此方法,存儲過程中的錯誤通常變得非常明顯。一旦我的查詢正確運行,我可以簡單地將代碼複製到我的proc並重新編譯。

祝你好運!

0

調試存儲過程。

  1. 檢查邏輯是否有意義。
  2. 使用斷點來幫助查找問題。
  3. 嘗試按照複雜流程進行模塊化設計。
  4. 將任務分成多個簡單的任務。
  5. 使用主存儲過程來控制頂層,並使用多個子存儲過程逐步完成作業。

  6. 根據優化,使用執行計劃,SS Profiler和DTA工具。