CREATE PROCEDURE  Pro_TestReutrnValue
(
@result  varchar(100)  output,
@title varchar(100)
)
as
begin transaction
insert into tg_advices(title)values(@title);
if @@error<>0
begin
set @result='成功'
print @@error
print @result
commit transaction
end
if @@error=0
begin
set @result='失败'
print @result
print @@error
-- 回滚事务
rollback transaction;
end
我执行存储过程 为什么失败呢 应该可以插入数据@@error<>0应该表示没有发生错误吧 为什么没有执行呢?

解决方案 »

  1.   

    @@error=0 才表示 执行成功
      

  2.   


    @@error<>0 代表有错误
    CREATE PROCEDURE  Pro_TestReutrnValue
    (
    @result  varchar(100)  output,
    @title varchar(100)
    )
    as
    declare @error_num int
    begin transaction
    insert into tg_advices(title)values(@title);if @@error <>0
    begin
      set @result='失败'
      print @result
      print @@error
      -- 回滚事务
      rollback transaction;
    end
    else
    begin
    set @result='成功'
    print @@error
    print @result
    commit transaction
    end
      

  3.   

    CREATE PROCEDURE  Pro_TestReutrnValue
    (
    @result  varchar(100)  output,
    @title varchar(100)
    )
    as
    declare @error_num int
    begin transaction
    insert into tg_advices(title)values(@title);
    select @error_num=@@error -- 因为 @@error记录了上一个T-SQL的结果,任何一个SQL语句都会更新这个结果,所以要用一个中间变量来保存
    if @error_num <>0
    begin
      set @result='失败'
      print @result
      print @error_num
      -- 回滚事务
      rollback transaction;
    end
    else
    begin
    set @result='成功'
    print @error_num
    print @result
    commit transaction
    end
      

  4.   

    @@error<>0
    表示发生了错误
      

  5.   

    写反了。
    @@error = 0
    commit
      

  6.   

    1. @@error<>0表示发生了错误
    2.if @@error<>0最好加else
    3.select @@rowcount 来看执行行数