SQL Server事务回滚对自增键的影响

Posted wangboke

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server事务回滚对自增键的影响相关的知识,希望对你有一定的参考价值。

SQL Server事务回滚时是删除原先插入导致的自增值,也就是回滚之前你你插入一条数据导致自增键加1,回滚之后还是加1的状态

 

--如果获取当前操作最后插入的identity列的值:
select @@IDENTITY
--如果要获取某表的最后的identity列的值:
select IDENT_CURRENT(‘表名‘)

--如果要模拟抛出异常可以用RAISERROR 

--RAISERROR(‘错误的描述‘,错误的严重级别代码,错误的标识,错误的描述中的参数的值(这个可以是多个),一些其它参数)

--PRINT ‘出现异常,错误编号:‘ + convert(varchar,error_number()) + ‘,错误消息:‘ + error_message()

BEGIN TRAN Tran_Test;--开始事务
DECLARE @tran_error INT;
SET @tran_error = 0;
BEGIN TRY
INSERT INTO Table
RAISERROR (‘引用单据已被修改,操作失败!‘, 16, 1);
END TRY
BEGIN CATCH
PRINT ‘出现异常,错误编号:‘ + CONVERT(VARCHAR, ERROR_NUMBER()) + ‘,错误消息:‘
+ ERROR_MESSAGE();
SET @tran_error = @tran_error + 1;
END CATCH;
IF ( @tran_error > 0 )
BEGIN
--执行出错,回滚事务
ROLLBACK TRAN;
PRINT ‘!‘;
END;
ELSE
BEGIN
--没有异常,提交事务
COMMIT TRAN;
PRINT ‘!‘;
END;

SELECT SCOPE_IDENTITY();
SELECT @@IDENTITY;

以上是关于SQL Server事务回滚对自增键的影响的主要内容,如果未能解决你的问题,请参考以下文章

auto_increment 自增键的一些说明

SQL Serve 日志体系结构

SQL中返回自增键和最后插入ID的区别

sql server存储过程回滚事务

SQL Server-聚焦事务对本地变量临时表表变量影响以及日志文件存满时如何收缩(三十一)

SQL Server 中自增主键的上限