sql - 在事务中使用@@IDENTITY 是否安全?

标签 sql sql-server tsql coldfusion transactions

我在看 this回答获取最后一个身份值输入数据库的不同方法。

据我了解,@@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>

由于“If a transaction is successful, all of the data modifications made during the transaction are committed and become a permanent part of the database”,这是否意味着它还可以防止使用 @@IDENTITY 时可能出现的问题?还是我误解了交易行为?

最佳答案

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

关于sql - 在事务中使用@@IDENTITY 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39399145/

相关文章:

提交后Sql事务不释放锁

c# - cmd.Parameters.AddWithValue 可为空的 int

sql - 逐行复制表格

mysql - SQL 帮助。如何在同一行排列值,向上移动一列?

SQL Server 2012 getClob() : The conversion from varchar (nvarchar) to CLOB is unsupported

sql - 如何在 Oracle Sql Developer 中查看解释计划?

mysql - SQL——加速查询

sql - 如何使用表中可能不可用的 ID 构建 SQL 语句?

sql - LEFT OUTER JOIN 如何返回比左表中存在的记录更多的记录?

sql - ']'附近的语法不正确。