如何提取出SQLServer的事务日志?可以试试这个,可以提前日志,不过不保证能提取到出问题那个时候的日志,因为如果服务器做日志备份,这些日志可能被截断了: select * from fn_dblog(null,null) 不过,我觉得很有可能使当时事务报错了,但继续往下执行了,最后也提交了,而报错那个语句正是流水表的那个语句。所以,上次你和我说了这个问题,考虑使用 set xact_abort on : 一直以为存储过程会自动实现事务操作,其实不然。存储过程只是提供的事务操作的支持。要实现事务操作,还得自己实现。 基本上方法有两个: SET XACT_ABORT指定当 Transact-SQL 语句产生运行时错误时,sql server 是否自动回滚当前事务。语法 SET XACT_ABORT { ON | OFF }注释 当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行 时 错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。编译错误(如语法错误)不受 SET XACT_ABORT 的影响。对于大多数 OLE DB 提供程序(包括 SQL Server),隐性或显式事务中的数据修改语句必须将 XACT_ABORT 设置为 ON。唯一不需要该选项的情况是提供程序支持嵌套事务时。有关更多信息,请参见分布式查询和分布式事务。
想找到问题的话,把那一段日志(SQLServer的事务日志)取出来分析
select *
from fn_dblog(null,null)
不过,我觉得很有可能使当时事务报错了,但继续往下执行了,最后也提交了,而报错那个语句正是流水表的那个语句。所以,上次你和我说了这个问题,考虑使用 set xact_abort on : 一直以为存储过程会自动实现事务操作,其实不然。存储过程只是提供的事务操作的支持。要实现事务操作,还得自己实现。 基本上方法有两个: SET XACT_ABORT指定当 Transact-SQL 语句产生运行时错误时,sql server 是否自动回滚当前事务。语法
SET XACT_ABORT { ON | OFF }注释
当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行 时 错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。编译错误(如语法错误)不受 SET XACT_ABORT 的影响。对于大多数 OLE DB 提供程序(包括 SQL Server),隐性或显式事务中的数据修改语句必须将 XACT_ABORT 设置为 ON。唯一不需要该选项的情况是提供程序支持嵌套事务时。有关更多信息,请参见分布式查询和分布式事务。