一个容易忽视的存储过程问题

在MS SQL SEVER的存储过程中,最好加上事务哦,一般的书上都没提到这点,以后要注意下:

set xact_abort on
begin transcation
/**中间执行的SQL代码*/
commit transcation
 if @@error>0
       rollback

SET XACT_ABORT
指定当 Transact-SQL 语句产生运行时错误时,Microsoft? SQL Server? 是否自动回滚当前事务
,当设置为ON时,如果产生错误,则回滚整个事务,为OFF时,只回滚产生错误的SQL语句,而事务继续进行处理。 
  如果 Transact-SQL 语句执行成功,则 @@ERROR 系统函数返回 0;如果此语句产生错误,则 @@ERROR 返回错误号。每一个 Transact-SQL 语句完成时,@@ERROR 的值都会改变。

因为每个 Transact-SQL 语句执行完毕时,@@ERROR 都会得到一个新的值,@@ERROR 可用以下两种方法处理:

1.在 Transact-SQL 语句后,马上检测或使用 @@ERROR。


2.在 Transact-SQL 语句完成后,马上把 @@ERROR 存储到一个整型变量中。此变量的值可供以后使用。

@@ERROR 通常用于表示存储过程的成功或失败。整型变量初始化为 0。完成每个 Transact-SQL 语句后,都要测试 @@ERROR 是否为 0。如果 @@ERROR 不是 0,将被存储在变量中。存储过程然后在 RETURN 语句中返回变量。如果过程中的 Transact-SQL 语句都没有错误,变量保持为 0。如果一个或多个语句生成错误,则变量包含最后的错误号。

你可能感兴趣的:(sql,SQL Server,Microsoft)