軟件測試開發技術SQL Server的怪辟:異常與孤立事務[2] SQL Server數據庫
關鍵字:sql 三、使用 set xact_abort 來控制部分違反約束的錯誤的執行過程
以下是引用片段:
create table Table1 (a int check(a>100))
go
set xact_abort on
begin tran
insert table1 values(10)
print '這里沒有被執行'
commit tran
go
print '' print '==============================================' print ''
set xact_abort off
begin tran
insert table1 values(10)
print '這里被執行'
commit tran
go
drop table table1
但 set xact_abort 對于編譯產生的錯誤確沒有起作用,且同樣會產生孤立事務
set xact_abort on
begin tran
insert 一個不在的表 values(10)
print '這里沒有被執行'
commit tran
go
print '' print '==============================================' print ''
set xact_abort off
begin tran
insert 一個不在的表 values(10)
print '這里沒有被執行'
commit tran
go
select @@trancount 當前連接的活動事務數 ---有兩個孤立事務
if @@trancount<>0 rollback tran
對于sql中怪辟的各種錯誤,和孤立事務在t-sql編程中一定要注意,小心孤立事務的陷阱,盡量避免浪費或孤立資源,Microsoft公開宣布過SQLServe下一版本Yukon將有內置異常處理語法。那時可以通過代碼對無法預料的錯誤有更好的控制。
原文轉自:http://www.anti-gravitydesign.com