我在看 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/