首页 > 解决方案 > 在同一记录中重新插入主键

问题描述

我需要将记录插入生产表。问题是其中一个字段需要与主键具有相同的值。

在下面的示例中,插入查询将“99”放入 [AlsoMyID]。但这只是一个占位符。它必须是进入 [MyID] 的任何值。

如何编写插入查询,以便系统将相同的 PK 值添加到[ MyID] 和 [AlsoMyID]?

Drop table #mylittletable

Create table #Mylittletable (
[MyID] int IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[AlsoMyID] int,
[ActualData] varchar(1))

Select * from #Mylittletable

Insert into #Mylittletable values (99,'x')

Select * from #Mylittletable

如果您对背景感兴趣,开发人员正在使用 AlsoMyID 作为链接字段,因此可以使用原始主键值将任意数量的记录链接在一起。也就是说,我无法控制表结构。

标签: sql-servertsql

解决方案


首先,您不能指定标识列的值,除非您使用 set identity_insert on。所以根据您的要求,您需要在 AlsoMyID 中插入与 MyID 相同的值。

您可以将其计算为流动:

insert into Mylittletable
select @@IDENTITY+1,'1'

推荐阅读