Ian*_*oyd 7 sql-server sql-server-2008-r2 xact-abort
根据联机丛书文档SET XACT_ABORT ON,我得到的印象是,如果T-SQL语句引发运行时错误,整个事务将终止并回滚:
备注
当SET XACT_ABORT为ON时,如果Transact-SQL语句引发运行时错误,则终止并回滚整个事务.
在SQL Server 2008 R2中测试:
SET XACT_ABORT ON;
BEGIN TRANSACTION;
PRINT 'TranCount befor an error = '+CAST(@@Trancount AS varchar(50))
DROP TABLE QuertyAsdf
PRINT 'TranCount after an error = '+CAST(@@Trancount AS varchar(50))
Run Code Online (Sandbox Code Playgroud)
给出输出:
TranCount befor an error = 1
Msg 3701, Level 11, State 5, Line 6
Cannot drop the table 'QwertyAsdf', because it does not exist or you do not have permission.
TranCount after an error = 1
Run Code Online (Sandbox Code Playgroud)
SET XACT_ABORT ON如果出现错误,我的印象是终止批次:
SET XACT_ABORT ON指示SQL Server回滚整个事务,并在发生运行时错误时中止批处理.
这听起来很方便.我怎么能这样做呢?
SQL Server 仅在 Severity 级别大于或等于 16 时回滚事务。
见示例:
Msg 544, Level 16, State 1, Line 1
Cannot insert explicit value for identity column in table 'ORC_ORCAMENTO' whenIDENTITY_INSERT is set to OFF.
Run Code Online (Sandbox Code Playgroud)
在 SQL Server 2008 R2 上测试
SET XACT_ABORT ON;
BEGIN TRANSACTION;
PRINT 'TranCount befor an error = '+CAST(@@Trancount AS varchar(50))
insert into ORC_ORCAMENTO (ORCID, ORCNOME, ORCATIVO) VALUES (1, 'TESTE_ALEXP', 0);
PRINT 'TranCount after an error = '+CAST(@@Trancount AS varchar(50))
Run Code Online (Sandbox Code Playgroud)
退货
TranCount befor an error = 1
Msg 544, Level 16, State 1, Line 5
Cannot insert explicit value for identity column in table 'ORC_ORCAMENTO' when IDENTITY_INSERT is set to OFF.
TranCount after an error = 0
Run Code Online (Sandbox Code Playgroud)
请参阅 Microsoft 错误消息级别
| 归档时间: |
|
| 查看次数: |
6390 次 |
| 最近记录: |