SQL2000中@@ERROR的使用提醒
SQL SERVER 2000中不支持TRY, CATCH語法,所以對于異常的捕捉處理只可以根據(jù)@@ERROR來判斷;
經(jīng)常的用法是在執(zhí)行語句后直接判斷@@ERROR <> 0 看是不是執(zhí)行成功。
然而日前因為存儲過程的多并發(fā)調(diào)用,對一個表插入數(shù)據(jù),產(chǎn)生主鍵沖突的情況,經(jīng)過分析,由如下問題:
代碼1:
BEGIN TRAN
INSERT INTO PSR..zkj_test(id) VALUES(1)
if @@ERROR <> 0
begin
SELECT @@ERROR as xxx
end
COMMIT TRAN
輸出結(jié)果:
服務(wù)器: 消息 2627,級別 14,狀態(tài) 1,行 1
違反了 PRIMARY KEY 約束 'PK__zkj_test__4CB7D400'。不能在對象 'zkj_test' 中插入重復(fù)鍵。
語句已終止。
xxx
-----------
0
(所影響的行數(shù)為 1 行)
?
@@ERROR輸出為零,但是進入了if,表示@@ERROR 對于每一條SQL語句執(zhí)行都會重新賦值,此時不能看到你想看到上句執(zhí)行錯誤的值
?
代碼2:
BEGIN TRAN
DECLARE @errnum AS int
INSERT INTO PSR..zkj_test(id) VALUES(6)
SET @errnum = @@ERROR
if @errnum <> 0
begin
SELECT @errnum as xxx
end
COMMIT TRAN
輸出結(jié)果:
服務(wù)器: 消息 2627,級別 14,狀態(tài) 1,行 1
違反了 PRIMARY KEY 約束 'PK__zkj_test__4CB7D400'。不能在對象 'zkj_test' 中插入重復(fù)鍵。
語句已終止。
xxx
-----------
2627
(所影響的行數(shù)為 1 行)
?
可以達到預(yù)期效果
?
兩段代碼的對比一目了然,關(guān)鍵就在于臨時變量,所以以后必須十分注意。
轉(zhuǎn)載于:https://www.cnblogs.com/jiqiwoniu/p/5195924.html
總結(jié)
以上是生活随笔為你收集整理的SQL2000中@@ERROR的使用提醒的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL 5.6 my.cnf 参数说
- 下一篇: dictionary 用linQ排序