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

Sql server 在同一记录中重新插入主键,sql-server,tsql,Sql Server,Tsql,我需要在生产表中插入记录。问题是其中一个字段的值必须与主键的值相同 在下面的示例中,Insert查询正在将“99”放入[ALSMYID]。但这只是一个占位符。它需要是[MyID]中的任何值 如何编写Insert查询,以便系统将相同的PK值添加到[MyID]和[AlsmyId] Drop table #mylittletable Create table #Mylittletable ( [MyID] int IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,

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

在下面的示例中,Insert查询正在将“99”放入[ALSMYID]。但这只是一个占位符。它需要是[MyID]中的任何值

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

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作为链接字段,以便可以使用原始主键值将任意数量的记录链接在一起。这就是说,我无法控制表结构。

首先,除非使用set identity\u insert on,否则无法指定identity列的值。因此,根据您的需求,需要将与MyID相同的值插入到alsmyid

您可以将其计算为流动:

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

首先,除非使用set identity\u insert on,否则不能指定标识列的值。因此,根据您的需求,需要将与MyID相同的值插入到alsmyid

您可以将其计算为流动:

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

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

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

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

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

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

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

那么,您希望
alsmyid
自动具有与
MyID
相同的值吗?您可以将
alsmyid
定义为计算列,或者在插入时编写一个将填充
alsmyid
的触发器。也许还有其他方法。“开发人员使用AlsoMyID作为链接字段,因此可以使用原始主键值将任意数量的记录链接在一起。”同一个表中的多个记录?我并没有真正理解这里的逻辑。嗯,把同一个值存储两次没有多大意义。简而言之,你不能。忽略非工作代码(因为如果没有特殊语句,就无法为标识列提供值),因此没有直接功能来复制插入时分配给插入行的标识值。正如其他人所写,这需要一个多步骤的过程才能在没有硬编码值的情况下工作。@ZoharPeled,想象一下10条记录,其中
MyID
从1到10递增,但
alsmyid
是一个常数1。同一值在第一条记录上只存储两次。在我的情况下,我对这个功能不感兴趣,所以我只需要它们是一样的。如果不清楚的话,请道歉。@PowerUser现在这更有意义了。感谢您的澄清。那么,您是否希望
alsmyid
自动具有与
MyID
相同的值?您可以将
alsmyid
定义为计算列,或者在插入时编写一个将填充
alsmyid
的触发器。也许还有其他方法。“开发人员使用AlsoMyID作为链接字段,因此可以使用原始主键值将任意数量的记录链接在一起。”同一个表中的多个记录?我并没有真正理解这里的逻辑。嗯,把同一个值存储两次没有多大意义。简而言之,你不能。忽略非工作代码(因为如果没有特殊语句,就无法为标识列提供值),因此没有直接功能来复制插入时分配给插入行的标识值。正如其他人所写,这需要一个多步骤的过程才能在没有硬编码值的情况下工作。@ZoharPeled,想象一下10条记录,其中
MyID
从1到10递增,但
alsmyid
是一个常数1。同一值在第一条记录上只存储两次。在我的情况下,我对这个功能不感兴趣,所以我只需要它们是一样的。如果不清楚的话,请道歉。@PowerUser现在这更有意义了。感谢您的澄清。他/她没有在标识列上指定任何内容。他/她没有在标识列上指定任何内容。此触发器应仅适用于
插入
-如果他们也希望
更新
,则该列中没有任何意义。触发器当前已损坏,并且对于多行插入/更新将失败。您是对的,它应该只用于插入。将更新部分拿走此触发器应仅用于
INSERT
-如果他们也希望
update
使用它,则列中没有任何点。触发器当前已损坏,并且对于多行插入/更新将失败。您是对的,它应该只用于插入。删除了更新部分