SQL Server @@ERROR 用法
@@error是系統函數,當沒有發生錯誤時返回0,如果發生錯誤時@@error<>0,並返回錯誤號,每個SQL語句執行完,@@error值都會變。
@@error只記錄當前錯誤,如果存儲過程執行多個操作,就要每次都判讀@@error是否出現錯誤,比較麻煩。
今天就遇到這個問題了,下面是一個簡單的例子,就可以解決這個問題。
create proc proc_Test
--根據ID修改表
@id int , --id
@name varchar(20) --名字
as
begin transaction
declare @errors int --錯誤數
--根據id修改
update table1 set name=@name where id=@id
--設置接受錯誤數
set @errors=@errors+@@error
r
--查詢銷售id
select @xsbfid =id from receipt2 where sn=@sn
set @errors=@errors+@@error
--插入樣機表
insert into table2
(name )values(@name)
set @errors=@errors+@@error
if (@errors<>0)
begin
rollback transaction
end
else
begin
commit transaction
end
只是聲明了一個變量,每次用它來累積錯誤值。嘻嘻,問題就解決了。
http://blog.163.com/happy_2010_zyj/blog/static/151148756201041044646221/
@@ERROR:當前一個語句遇到錯誤,則返回錯誤號,否則返回0。需要註意的是@ERROR在每一條語句執行後會被立刻重置,因此應該在要驗證的語句執行後檢查數值或者是將它保存到局部變量中以備將來使用。
DECLARE @num INT,@temp INT DECLARE @err INT SELECT @temp=0; SET @err=0 SET @num =2/@temp; --執行後@@ERROR為8134 PRINT @@ERROR --執行後@@ERROR為0 IF @@ERROR = 0 BEGIN PRINT @@ERROR END
分析:上面的SQL語句出現除0的錯誤,拋出錯誤信息,所以在執行除0語句後的@@Error數值是8134,但是在執行第一個Print @Error語句輸出錯誤信息之後,註意,此時@@Error的數據立即變成了0!,這一點非常重要,因為@@Error在每一條語句執行後立刻被重置!同樣的道理,執行IF @@ERROR = 0語句後@@ERROR的數值仍然是0,因為這句話也沒有發生錯誤!
SQL Server @@ERROR 用法