alter proc sp_tran
as
BEGIN TRANSACTION
update t1 set a=1
if (@@ERROR<>0)
begin
rollback TRANSACTION
select 0
return 0
end
update t1 set a='a'---这行插入会失败
if (@@ERROR<>0)
begin
rollback TRANSACTION
select 0
return 0
end
commit TRANSACTION
select 1
return 1
--exec sp_tran我想得到这个0(失败),1(成功)
在查询分析器里执行,直接出错, 没得到值
as
BEGIN TRANSACTION
update t1 set a=1
if (@@ERROR<>0)
begin
rollback TRANSACTION
select 0
return 0
end
update t1 set a='a'---这行插入会失败
if (@@ERROR<>0)
begin
rollback TRANSACTION
select 0
return 0
end
commit TRANSACTION
select 1
return 1
--exec sp_tran我想得到这个0(失败),1(成功)
在查询分析器里执行,直接出错, 没得到值
gocreate proc sp_tran
@value int
as
BEGIN TRANSACTION
insert t1 values(@value)
if @@error<>0
begin
rollback tran
return 0
end
else
begin
commit TRAN
return 1
end
godeclare @r intexec @r=sp_tran 5
if @r=1
print '执行成功'
else
print '执行失败'exec @r=sp_tran 50
if @r=1
print '执行成功'
else
print '执行失败'select * from t1drop table t1
drop proc sp_tran/*
执行成功
服务器: 消息 547,级别 16,状态 1,过程 sp_tran,行 6
INSERT 语句与 COLUMN CHECK 约束 'CK__t1__a__63649880' 冲突。该冲突发生于数据库 'MyData',表 't1', column 'a'。
语句已终止。
执行失败
a
-----------
5(所影响的行数为 1 行)
*/
2005可这样写:
begin try
begin tran
........
SQL语句select 1
commit tran
begin catch
rollback tran
select 0
end catch