【问题标题】:MSSQL - fetch Auto increment column value and save it in a another columnMSSQL - 获取自动增量列值并将其保存在另一列中
【发布时间】:2014-03-26 07:11:59
【问题描述】:

这是关于 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。

在谷歌搜索几分钟后,它对我来说很好

insert into Order values('Vegitable Order', IDENT_CURRENT('Order'))

我正在使用 java 应用程序 spring JDBC 模板来执行查询。有什么问题吗?特别是在多线程环境中?

【问题讨论】:

标签: jdbc auto-increment mssql-jdbc


【解决方案1】:

使用IDENT_CURRENT 不是一个好主意。如果有并发事务,返回的值可能不是你的最后插入的id,而是另一个事务的最后插入的id!

使用 JDBC getGeneratedKey 工具检索第一个 INSERT 的生成 id,并在第二个 INSERT 中使用检索到的值,或者在第二个 INSERT 中使用 SCOPE_IDENTITY()。使用SCOPE_IDENTITY() 确保您在同一个事务中执行这两个语句。

另请参阅:How to get the insert ID in JDBC?

【讨论】:

  • 你好马克,非常感谢你的回答。在这里我不能使用 getGeneratedKey,因为没有 2 个插入。我想将此自动生成的值保存到同一个表中的其他列中。如果我使用 getGeneratedKeys 我需要对同一个表进行单独更新以更新该列。请告诉我你的想法
  • @keth 我不知何故错过了这一点。为什么要将标识列保存在同一个表的不同列中?那是不必要的信息重复;简单地禁止更改标识列。
猜你喜欢
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2018-01-22
  • 2017-09-30
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多