【问题标题】:How to insert a new record in a table by MAX(ID) + 1 of the same table如何在同一张表的MAX(ID)+1的表中插入一条新记录
【发布时间】:2014-04-25 20:55:17
【问题描述】:

我有一张桌子CMT_M_DISPOSITION (DispositionKey, DispositionValue)。 PK 在DispositionKey。我希望通过在第一列中使用 MAX(DispositionKey) + 1 来插入新记录。

我收到一个错误

无效的列 DispositionKey

当我运行以下代码时。

谁能解释我为什么会收到这个错误以及如何解决它?

SET IDENTITY_INSERT EY_CMT_TestV2..CMT_M_DISPOSITION ON

Insert into CMT_M_DISPOSITION (DispositionKey, DispositionValue) 
values (MAX(DispositionKey) + 1, 'Newest')

SET IDENTITY_INSERT EY_CMT_TestV2..CMT_M_DISPOSITION OFF

【问题讨论】:

  • 您正在尝试从INSERT 的表中选择 MAX(DispositionKey),这就是它抛出错误的原因。不过,我很好奇,为什么不让 ID 自动递增?
  • Insert into CMT_M_DISPOSITION(DispositionKey,DispositionValue) select (MAX(DispositionKey) + 1, 'Newest') from CMT_M_DISPOSITION ????
  • @BhupeshC (INSERT INTO.. SELECT) 的评论插入成功,那为什么我的插入语句失败?
  • Uhhhhhh...你为什么不让标识列做它的事情?

标签: sql sql-server insert max identity


【解决方案1】:
SET IDENTITY_INSERT EY_CMT_TestV2..CMT_M_DISPOSITION ON

  Insert into CMT_M_DISPOSITION(DispositionKey,DispositionValue) select MAX(DispositionKey) + 1, 'Newest' from CMT_M_DISPOSITION 

SET IDENTITY_INSERT EY_CMT_TestV2..CMT_M_DISPOSITION OFF

标识插入允许您插入显式值(在这种情况下,是在 INSERT INTO ... SELECT 中定义的显式值),因此需要在插入之前打开。

【讨论】:

  • 基本是,如果你需要插入列数据,你使用insert select语句
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多