在同一条记录中重新插入主键

时间:2019-04-08 23:21:33

标签: sql-server tsql

我需要将记录插入生产表中。问题在于,其中一个字段的值必须与主键相同。

在下面的示例中,Insert查询将“ 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用作链接字段,因此可以使用原始主键值将任意数量的记录链接在一起。也就是说,我无法控制表结构。

2 个答案:

答案 0 :(得分:0)

首先,除非使用set identity_insert on,否则无法指定标识列的值。因此,根据您的要求,您需要在AlsoMyID中插入与MyID相同的值。

您可以解决问题:

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

答案 1 :(得分:0)

使用此触发器在表上,您可以在alsoMyID列中插入任何内容,这些内容将被myID列中的设置所覆盖。

create trigger tr_Mylittletable ON Mylittletable
AFTER INSERT AS
BEGIN
    declare @ID int = (select MyID from inserted)
    update Mylittletable set AlsoMyID = @ID where MyID = @ID
END

注意:仅在一次插入一行时有效!