在交易中使用@@ IDENTITY是否安全?

Ect*_*opy 3 sql t-sql sql-server coldfusion transactions

我读这个回答有关获取输入到数据库的最后一个标识值的不同方法.

根据我的理解,@@IDENTITY这通常是一个非常糟糕的主意,因为它可能会返回一个与您预期不同的标识 - 例如最近由触发器创建的标识值.

但是,如果您的代码在交易中怎么办?

例如,这是我正在做的事务的简化版本(使用ColdFusion):

<cftransaction>
    <cfquery name="queryInsertA" datasource="source">
        INSERT INTO tableA (columnName) VALUES (value)
    </cfquery>
    <cfquery name="queryInsertB" datasource="source">
        INSERT INTO tableB (fkey_tableA, columnName) VALUES (@@IDENTITY, value)
    </cfquery>
</cftransaction>
Run Code Online (Sandbox Code Playgroud)

因为," 如果事务成功,那么在事务期间进行的所有数据修改都会被提交并成为数据库的永久部分 ",这是否意味着它还可以防止使用时可能出现的问题@@IDENTITY?还是我误解了交易的行为?

Rem*_*anu 14

您链接的答案已经解释了主要问题@@IDENTITY:范围.如果您的插入触发另一个插入,您将获得意外的身份.交易不会改变任何东西.