if @ybtemp=null——》if @ybtemp is null

解决方案 »

  1.   

    事务和@@error的用法对不对?
    如果第一条insert出现错误下面的insert、update会不会执行?
      

  2.   

    --下面演示了SQL错误处理的脆弱性--演示2,存储过程嵌套调用中的错误--测试的存储过程1
    create proc p1
    as
    print 12/0
    if @@error<>0
    print '发生错误1'select * from newid()
    if @@error<>0
    print '发生错误2'
    go--测试的存储过程2
    create proc p2
    as
    exec p1if @@error<>0
    print '调用 存储过程1 异常结束'
    else
    print '调用 存储过程1 正常结束'
    go--调用
    exec p2
    go--删除测试
    drop proc p1,p2/*--测试结果服务器: 消息 8134,级别 16,状态 1,过程 p1,行 8
    遇到被零除错误。
    发生错误1
    服务器: 消息 208,级别 16,状态 1,过程 p1,行 12
    对象名 'newid' 无效。
    调用 存储过程1 异常结束
    --*/
    /*--结论2:被调用的存储过程发生严重错误时,调用它的存储过程可以捕获错误,并可以继续执行下去
    --*/
      

  3.   

    --我建议你这样写CREATE proc uuuuuuuuu
    --基本信息
    @参数1 varchar(50),
    @参数2 varchar(50),
    ..................
    --输出参数,用来查看事务是否成功,0表示成功,1表示不成功
    @returnFlag  int outputas
    DECLARE @ybtemp intset @returnflag=1--设置此项,出错时自动回滚事务并终止执行
    --所以上面的 @returnflag 初始值为1 
    set xact_abort on begin tran
    insert into table1 values(......)insert into table2(.....) values (......)update table3 set ddddd=ddddd+1 where ...........update table4 set eee=eee+1 where ................if ......(某参数)=0
    BEGIN
    update table5...........

    update table6 ...........

    select @ybtemp=Y_shouyi from table3 where .........
    if @ybtemp=null
    update table33 .............
    else
    update table33 ............

    ENDCOMMIT TRAN
    set @returnflag=0
    GO