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(成功)
在查询分析器里执行,直接出错, 没得到值

解决方案 »

  1.   

    create table t1(a int check(a<10))
    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 行)
    */
      

  2.   


    2005可这样写:
    begin try
    begin tran
    ........
    SQL语句select 1
    commit tran
    begin catch 
    rollback tran
    select 0
    end catch