程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> @@ERROR和@@ROWCOUNT

@@ERROR和@@ROWCOUNT

編輯:關於SqlServer
 

1. @ERROR

當前一個語句遇到錯誤,則返回錯誤號,否則返回0。需要注意的是@ERROR在每一條語句執行後會被立刻重置,因此應該在要驗證的語句執行後檢查數值或者是將它保存到局部變量中以備將來使用。具體的分析請看下面的代碼,一目了然。

Update AF_CarInfo SET CarInfoID = 19 Where OilCost = 13 --執行後@@ERROR為547

PRINT @@ERROR --執行後@@ERROR為0

IF @@ERROR = 0

BEGIN

PRINT @@ERROR

END

-----------------------------------------------------------------

消息547,級別16,狀態0,第1 行

Update 語句與REFERENCE 約束"FK_AF_MILEE_REFERENCE_AF_CARIN"沖突。該沖突發生於數據庫"Lymit_PrintERP",表"dbo.AF_MileEnrol", column 'CarInfoID'。

語句已終止。

547

0

分析:上面的更新SQL語句導致主外鍵沖突,拋出錯誤信息,所以在執行Update語句後的@@Error數值是547,但是在執行第一個Print @Error語句輸出錯誤信息之後,注意,此時@@Error的數據立即變成了0!,這一點非常重要,因為@@Error在每一條語句執行後立刻被重置!同樣的道理,執行IF @@ERROR = 0語句後@@ERROR的數值仍然是0,因為這句話也沒有發生錯誤!
1.2. @@ROWCOUNT

返回上一語句受影響的行數!和@ERROR一樣的特性,在每一條語句執行後都將被重置,如果將來使用需要將變量保存到局部變量中。任何不返回的語句都將這個變量置為0!比如經常使用的IF語句。廢話少說,上代碼!

DECLARE @RowCountVar INT

Update AF_CarOil SET OilType = '五號汽油'--執行後@@ROWCOUNT為2

SET @RowCountVar = @@ROWCOUNT --執行後@@ROWCOUNT為1

IF @@ROWCOUNT = 1 --執行後@@ROWCOUNT為0

BEGIN

PRINT '影響的行數為1'

PRINT @@ROWCOUNT

END

IF @RowCountVar <> 0

BEGIN

PRINT '受影響的行數為:' + STR(@RowCountVar)

END

-----------------------------------------------------------------

 

(2 行受影響)

影響的行數為 1

0

受影響的行數為: 2

分析:上面的代碼中在執行Update語句之後,受影響的行數為2行,然後將受影響的行數保存到事先聲明的局部變量中,賦值語句實際上影響的行數為1行,在下面的IF語句中進行了跳轉,這個地方是關鍵,這並不是Update語句受影響的行數是1,而是將@@ROWCOUNT將的賦給局部變量的過程中變成了1。在執行後IF @@ROWCOUNT = 1的判斷之後@@ROWCOUNT的數值重新被賦值為了0!

總結:@@ROWCOUNT和@@ERROR變量的值,在執行完一條語句後總是會發生變化,所以我們將他們作為判斷的依據的時候應該首先保存在局部變量中。他們反映的都是緊接著的上一條語句對他們的影響!
 

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved