SQL的错误处理是这样弱的,严重错误就挂起事务,终止执行,要求你手工去干预

解决方案 »

  1.   

    --一般这么写CREATE PROCEDURE sp_Test 
    @re bit out --0表示成功,1表示失败
    AS
    set @re=1
    set xact_abort on  --出错时,让事务自动回滚
    begin tran
    insert into table1(PK,INT2) values('xx',1) --本句正常执行
    delete from table2 --本句有误,表table2不存在
    commit tran
    set @re=0
    GO
      

  2.   

    如果只有" delete from table2 --本句有误,表table2不存在"这一句,
    即:
    --------------------------------------------------------------
    CREATE PROCEDURE sp_Test 
    @re bit out --0表示成功,1表示失败
    AS
    set @re=1
    set xact_abort on  --出错时,让事务自动回滚
    begin tran
    delete from table2 --本句有误,表table2不存在
    commit tran
    set @re=0
    GO
    --------------------------------------------------------------
    --调用 
    exec sp_Test 1
    --错误
    服务器: 消息 208,级别 16,状态 1,过程 sp_Test,行 7
    对象名 'table2' 无效。
    服务器: 消息 266,级别 16,状态 1,过程 sp_Test,行 9
    EXECUTE 后的事务计数指出缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。原计数 = 0,当前计数 = 1。
      

  3.   

    哦,看来SQL的错误处理真是弱到家了
      

  4.   

    两位大哥,但我必须在程序里提示出错信息啊,我是用一个output变量来得到的,如
    @r varchar(1000) output,然后将上述存储过程里的print "..."里,换成错误信息提示给用户,这时,如果出现了错误,根据就执行不到赋返回值的那一条语句啊?