SQL存儲過程調試

今天忽然有同事問起,如何在sqlserver中調試存儲過程(咱們公司使用的是sqlserver 2008 R2),猛地一看,和之前使用sqlserver 2000真的有很大的不一樣,我真暈了。sql

因而琢磨了一下。SQLSERVER 2005中不知因何去掉了很重要的DEBUGGER功能,要調試,必需要安裝VS2005專業版或者更高版本。很是不方便。數據庫

還好,SQLSERVER 2008中這個很重要並且方便的功能又回來了。瀏覽器

    不過,SQLSERVER 2008的調試功能和SQL2000的方法差異很大。SQL2000是在查詢分析器中的對象瀏覽器中選中須要調試的存儲過程,右鍵----調試---輸入參數開始調試。服務器

sqlserver2008中則徹底不一樣,變成了必需要在SSMS中EXEC [PROCEDURE NAME] @VAR1,@VAR2,而後點綠色三角或者點菜單中的調試---啓動調試。而後點工具欄的最右邊的單步調試或者跳出等。下面的變量窗口和堆棧窗口等能夠查看調試中變量等動態變化值。編輯器

     sqlserver2008調試的要求和條件:若是在引擎所在的電腦或服務器上調試,則只須要SA或者WINDOWS用戶登錄便可。若是是異地調試,則須要設置防火牆例外,增長SSMS和SQLSERVER.EXE爲容許,增長135端口容許經過。函數

總之,SQL2008的調試比2000操做起來麻煩多了,要求也多了。剛開始感受不如2000的好用,也多是使用2000習慣了。習慣是可怕的,可是微軟是在不斷進步的...工具

 

1、回顧早期的SQL SERVER版本:sqlserver

早在SQL Server 2000時代,查詢分析器的功能還很簡陋,遠不如VS那麼強大。到SQL Server 2005時代,代碼高亮、SQL優化等功能逐漸增強,可是依然沒法調試SQL語句。好一點的第三方的SQL語法編輯器彷佛也不夠完美,這樣致使一些人抱怨存儲過程不便於維護,開發的時候能不用則不用。優化

2、SQL Server 2008 Express 智能提示增強:spa

該功能是SQL2008在SQL Server 2005以後的升級版,咱們能夠很方便的調用智能提示,和 VS一致:使用快捷鍵ctrl + J 便可。

截圖以下:

 

該功能是否與VS同樣了呢? 畢竟他們都是微軟的產品。

3、調試T-SQL語句:

1.Debug普通T-SQL語句:

SQL代碼以下:

  1. use northwind  
  2. go  
  3. declare @i int ,@j int,@k int 
  4.  set @i = 1;  
  5.  set @j = 2;  
  6.  set @k=@i + @j  
  7.  select @i;  
  8.  go 

很是簡單的定義了 三個int 型變量:i、j、k而且對這些變量進行簡單的邏輯運算,在Management Studio 中只要輕鬆的按F11鍵,便可調試以上代碼塊。

截圖以下:

接着點擊F11逐語句debug 或者F10逐過程調試代碼。

截圖以下:

這個dubug的場面您是否以爲已經和VS相差無幾了呢?

4、支持複雜存儲過程嵌套debug:

您可能會疑問,在一個龐大的系統中,若是數據庫邏輯絕大部分都是存儲過程實現的狀況下,會出現存儲過程嵌套存儲過程或者嵌套存儲函數這樣的代碼。

SQL2008是否支持調試功能呢?答案是確定的。

首先定義一個簡單的存儲過程(本文使用NorthWind數據庫)代碼以下:

  1. CREATE procedure sp_getOrders   
  2.  @orderID int = null   
  3.  as   
  4. if (@orderID is null )   
  5.  begin  
  6.  print 'null'   
  7.  end   
  8. else   
  9. begin 
  10. print 'correct' 
  11.  end 
  12.  select * from Orders whereOrderID = @orderID  
  13. go 

該存儲過程在如下批處理內被調用,代碼以下:

  1. declare @i int ,@j int,@k int   
  2. set @i = 1;  
  3. set @j = 2;  
  4. select @k=@i + @j  
  5. exec sp_getOrders 10248  
  6.  select @i;  
  7. go 

F11對以上代碼進行SQL Debug。

截圖以下:

當斷點通過exec sp_getOrders 10248 這段代碼時,點擊F11進入sp_getOrders存儲過程進行逐語句debug。

截圖以下:

這樣能夠在嵌套的存儲過程或函數內進行debug了,此刻不得不認可: 升級後的SQL2008愈來愈強大。您還恐懼使用或者調試存儲過程麼?

 

原文來自 http://blog.csdn.net/dinglang_2009/article/details/6887413

相關文章
相關標籤/搜索