SQLTransaction:检索范围内插入的标识
SQLTransaction: Retreive Inserted Identities In Scope
我能否使用在 SQL 事务期间插入后获得的 OUTPUT inserted.identity 值(或者甚至 return 一个值)?
这是解释情况的伪代码
开始SQL交易(使用.NET SQL交易)
- Insert into table inserted
的输出标识字段
- 使用上述命令的输出标识插入另一个 table。
结束交易
我担心由于这是在一个事务中,并且第一个插入查询实际上并没有提交到数据库,所以第一个命令输出的标识列可能无效。
是否可以保证事务期间INSERT 的输出标识与事务后提交的相同?还是 SQL 在交易期间禁止 OUTPUT INSERTED.x?
是的,OUTPUT
子句的行为与 SCOPE_IDENTITY()
完全相同。
在第一个 INSERT
语句之后,记录将被插入到数据库中,只是尚未提交。至此身份永不改变
但是,如果要回滚事务,身份将永远丢失(留下间隙)
我能否使用在 SQL 事务期间插入后获得的 OUTPUT inserted.identity 值(或者甚至 return 一个值)?
这是解释情况的伪代码
开始SQL交易(使用.NET SQL交易)
- Insert into table inserted
的输出标识字段
- 使用上述命令的输出标识插入另一个 table。
结束交易
我担心由于这是在一个事务中,并且第一个插入查询实际上并没有提交到数据库,所以第一个命令输出的标识列可能无效。
是否可以保证事务期间INSERT 的输出标识与事务后提交的相同?还是 SQL 在交易期间禁止 OUTPUT INSERTED.x?
是的,OUTPUT
子句的行为与 SCOPE_IDENTITY()
完全相同。
在第一个 INSERT
语句之后,记录将被插入到数据库中,只是尚未提交。至此身份永不改变
但是,如果要回滚事务,身份将永远丢失(留下间隙)