我需要将记录插入生产表中。问题在于,其中一个字段的值必须与主键相同。
在下面的示例中,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用作链接字段,因此可以使用原始主键值将任意数量的记录链接在一起。也就是说,我无法控制表结构。
答案 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
注意:仅在一次插入一行时有效!