34,576
社区成员
发帖
与我相关
我的任务
分享
SET XACT_ABORT ON
declare @t table(a varchar(5))
begin tran
print '1'
insert @t
select 'ddddddd'
print '2'
delete @t
print '3'
commit tran
--名称解析过程的错误
declare @t table(a varchar(5))
begin tran
print '1'
insert @t
select 'd',''
print '2'
delete @t
print '3'
if @@error<>0
rollback tran
else
commit tran
--运行时错误
declare @t table(a varchar(5))
begin tran
print '1'
insert @t
select 'ddddddd'
print '2'
delete @t
print '3'
if @@error<>0
rollback tran
else
commit tran
測試1
改動態的方法
declare @t table(a varchar(5))
begin tran
insert @t
EXEC('select ''d''')--如果不能確定列是否存在時
if @@error<>0
BEGIN
rollback TRAN
RETURN
END
SELECT N'已執行1'
EXEC('DELETE A1')--如果表名不存在時
if @@error<>0
BEGIN
rollback TRAN
SELECT N'已執行2'
END
else
commit tran
declare @t table(a varchar(5))
begin tran
insert @t
select 'dsddfsdf'
if @@error<>0
begin
rollback tran
end
else
begin
delete 表A
commit tran
end
測試2:
USE tempdb
GO
IF object_id('A') IS NOT NULL
DROP TABLE A
go
CREATE TABLE A(ID int)
INSERT A SELECT 1
go
declare @t table(a varchar(5))
begin tran
insert @t
select 'dsddfsdf'
if @@error<>0
begin
rollback TRAN
RETURN
END
delete A
if @@error<>0
rollback tran
else
commit tran