这是关于MSSQL自动增量功能,我有以下表创建
CREATE TABLE Order(
[order_id] [int] IDENTITY(1,1) NOT NULL,
[name] [varchar](50) NULL,
[original_order_id] [int] NOT NULL
)
在这里我有一种情况,我需要将original_id的自动生成值插入original_order_id。
用Google搜索后几分钟后,它对我来说很好用
insert into Order values('Vegitable Order', IDENT_CURRENT('Order'))
我正在使用java应用程序spring JDBC模板来执行quires。可以有任何问题吗?特别是在多线程环境中?
答案 0 :(得分:1)
使用IDENT_CURRENT
并不是一个好主意。如果有并发交易,则返回的值可能不是您上次插入的ID,而是另一个交易的最后插入ID!
使用JDBC getGeneratedKey
工具检索第一个INSERT
的生成ID,并在第二个INSERT
中使用检索到的值,或在第二个SCOPE_IDENTITY()
中使用INSERT
{1}}。使用SCOPE_IDENTITY()
确保您在同一事务中执行两个语句。