如何在SQL Server 2008下輕松調(diào)試T-SQL語句和存儲過程
今天突然有同事問起,如何在sqlserver中調(diào)試存儲過程(我們公司使用的是sqlserver 2008 R2),猛地一看,和以前使用sqlserver 2000真的有很大的不同,我真暈了。
于是琢磨了一下。SQLSERVER 2005中不知因何去掉了很重要的DEBUGGER功能,要調(diào)試,必須要安裝VS2005專業(yè)版或者更高版本。非常不方便。
還好,SQLSERVER 2008中這個(gè)很重要而且方便的功能又回來了。
不過,SQLSERVER 2008的調(diào)試功能和SQL2000的方法差別很大。SQL2000是在查詢分析器中的對象瀏覽器中選中需要調(diào)試的存儲過程,右鍵----調(diào)試---輸入?yún)?shù)開始調(diào)試。
sqlserver2008中則完全不同,變成了必須要在SSMS中EXEC [PROCEDURE NAME] @VAR1,@VAR2,然后點(diǎn)綠色三角或者點(diǎn)菜單中的調(diào)試---啟動調(diào)試。然后點(diǎn)工具欄的最右邊的單步調(diào)試或者跳出等。下面的變量窗口和堆棧窗口等可以查看調(diào)試中變量等動態(tài)變化值。sqlserver2008調(diào)試的要求和條件:如果在引擎所在的電腦或服務(wù)器上調(diào)試,則只需要SA或者WINDOWS用戶登陸即可。如果是異地調(diào)試,則需要設(shè)置防火墻例外,增加SSMS和SQLSERVER.EXE為允許,增加135端口允許通過。
總之,SQL2008的調(diào)試比2000操作起來麻煩多了,要求也多了。剛開始感覺不如2000的好用,也可能是使用2000習(xí)慣了。習(xí)慣是可怕的,但是微軟是在不斷進(jìn)步的...
一、回顧早期的SQL SERVER版本:
早在SQL Server 2000時(shí)代,查詢分析器的功能還很簡陋,遠(yuǎn)不如VS那么強(qiáng)大。到SQL Server 2005時(shí)代,代碼高亮、SQL優(yōu)化等功能逐漸加強(qiáng),但是依然無法調(diào)試SQL語句。好一點(diǎn)的第三方的SQL語法編輯器似乎也不夠完美,這樣導(dǎo)致一些人抱怨存儲過程不便于維護(hù),開發(fā)的時(shí)候能不用則不用。
二、SQL Server 2008 Express 智能提示加強(qiáng):
該功能是SQL2008在SQL Server 2005之后的升級版,我們可以很方便的調(diào)用智能提示,和 VS一致:使用快捷鍵ctrl + J 即可。
截圖如下:

該功能是否與VS一樣了呢? 畢竟他們都是微軟的產(chǎn)品。
三、調(diào)試T-SQL語句:
1.Debug普通T-SQL語句:
SQL代碼如下:
use northwind go
declare @i int ,@j int,@k int set @i = 1;
set @j = 2; set @k=@i + @j
select @i; go
非常簡單的定義了 三個(gè)int 型變量:i、j、k并且對這些變量進(jìn)行簡單的邏輯運(yùn)算,在Management Studio 中只要輕松的按F11鍵,即可調(diào)試以上代碼塊。
截圖如下:

接著點(diǎn)擊F11逐語句debug 或者F10逐過程調(diào)試代碼。
截圖如下:

這個(gè)dubug的場面您是否覺得已經(jīng)和VS相差無幾了呢?
四、支持復(fù)雜存儲過程嵌套debug:
您可能會疑問,在一個(gè)龐大的系統(tǒng)中,如果數(shù)據(jù)庫邏輯絕大部分都是存儲過程實(shí)現(xiàn)的情況下,會出現(xiàn)存儲過程嵌套存儲過程或者嵌套存儲函數(shù)這樣的代碼。
SQL2008是否支持調(diào)試功能呢?答案是肯定的。
首先定義一個(gè)簡單的存儲過程(本文使用NorthWind數(shù)據(jù)庫)代碼如下:
CREATE procedure sp_getOrders @orderID int = null
as if (@orderID is null )
begin print 'null'
end else
begin print 'correct'
end select * from Orders whereOrderID = @orderID
go
該存儲過程在以下批處理內(nèi)被調(diào)用,代碼如下:
declare @i int ,@j int,@k int set @i = 1;
set @j = 2; select @k=@i + @j
exec sp_getOrders 10248 select @i;
go
F11對以上代碼進(jìn)行SQL Debug。
截圖如下:

當(dāng)斷點(diǎn)經(jīng)過exec sp_getOrders 10248 這段代碼時(shí),點(diǎn)擊F11進(jìn)入sp_getOrders存儲過程進(jìn)行逐語句debug。
截圖如下:

這樣可以在嵌套的存儲過程或函數(shù)內(nèi)進(jìn)行debug了,此刻不得不承認(rèn): 升級后的SQL2008越來越強(qiáng)大。您還恐懼使用或者調(diào)試存儲過程么?
相關(guān)文章
SQL Server 2008中的代碼安全(八)透明加密(TDE)
SQL Server 2008引入透明數(shù)據(jù)加密(Transparent Data Encryption),即TDE,它允許你完全無需修改應(yīng)用程序代碼而對整個(gè)數(shù)據(jù)庫加密。2011-06-06
SQL Server 2008網(wǎng)絡(luò)協(xié)議深入理解
可以通過展開SQL Server 2008網(wǎng)絡(luò)配置節(jié)點(diǎn)進(jìn)行服務(wù)器協(xié)議的配置,需要了解更多的朋友可以參考本文2012-11-11
解決sql server2008注冊表寫入失敗,vs2013核心功能安裝失敗
本文給大家分享的是作者在更換硬盤后全新安裝sql server2008以及VS2013的過程中遇到的注冊表無法寫入的問題以及解決方法,分享給大家,希望大家能夠喜歡2017-10-10
SQL2008中SQL應(yīng)用之- 死鎖(Deadlocking)
當(dāng)一個(gè)用戶會話(會話1)已經(jīng)落定了一個(gè)資源,而另一個(gè)會話(會話2)想要修改該資源,并且會話2也鎖定了會話1想要修改的資源時(shí),就會出現(xiàn)“死鎖”(deadlocking)。2011-06-06
SQL Server附加數(shù)據(jù)庫出錯(cuò),錯(cuò)誤代碼5123
本文介紹了幾種附加數(shù)據(jù)庫出現(xiàn)錯(cuò)誤代碼5123,幾種解決方法,同樣遇到這種問題的小伙伴可以參考下。2016-05-05
SQL Server 2008 數(shù)據(jù)庫鏡像部署實(shí)例之二 配置鏡像,實(shí)施手動故障轉(zhuǎn)移
上一篇文章已經(jīng)為配置鏡像數(shù)據(jù)庫做好了準(zhǔn)備,接下來就要進(jìn)入真正的配置階段2013-11-11
SQL Server 2008 阻止保存要求重新創(chuàng)建表的更改問題的設(shè)置方法
不是很理解為什么在2008中會加入阻止保存要求重新創(chuàng)建表的更改這個(gè)選項(xiàng).癥狀表現(xiàn)為修改表結(jié)構(gòu)的時(shí)候會"阻止"你.而且我遇到的情況是居然有的時(shí)候阻止你,有的時(shí)候不阻止你,摸不到頭腦.2012-05-05
sql server2008數(shù)據(jù)庫遷移的兩種方法
這篇文章主要為大家詳細(xì)介紹了sql server2008數(shù)據(jù)庫遷移的兩種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09
SQL Server 2008 R2——查找最小nIndex,nIndex存在而nIndex+1不存在 求最小連續(xù)數(shù)組中
這篇文章主要介紹了SQL Server 2008 R2——查找最小nIndex,nIndex存在而nIndex+1不存在 求最小連續(xù)數(shù)組中的最大值的相關(guān)資料,需要的朋友可以參考下2015-11-11
sql server連接不上怎么辦 SQL Server2008R無法登錄的解決方案(1814\18456)
sql server連接不上怎么辦?可能是系統(tǒng)文件損壞,莫慌!這篇文章為大家詳細(xì)介紹了SQL Server2008R無法登錄的解決方案,感興趣的小伙伴們可以參考一下2016-08-08

