复制整个行,不包括标识符列

问题描述 投票:0回答:2

我正在尝试在表中插入新行,该表是除标识符外的另一行的精确副本。以前我没有这个问题,因为有一个ID栏没有自动填充。所以我可以像这样复制一行

INSERT INTO table1 SELECT * FROM table1 WHERE Id = 5

然后像这样手动更改ID

WITH tbl AS (SELECT ROW_NUMBER() OVER (PARTITION BY Id ORDER BY Id) AS RNr, Id
FROM table1 WHERE Id = 5 
UPDATE tbl SET Id = (SELECT MAX(Id) FROM table1) + 1 
WHERE RNr = 2

最近,列ID已更改为不手动填充(我也希望更好)。但这导致错误,当IDENTITY_INSERT为假时,我显然无法填充该列。不幸的是,我无权在声明之前和之后使用SET IDENTITY_INSERT IdentityTable ON/OFF,无论如何我也想避免这样做。

[我正在寻找一种方法,以插入不包括ID列的整个行,而不在INSERTSELECT语句(它们很多)中互相命名。

sql-server copy id
2个回答
1
投票

在ID最大值以下的代码中加一,因此不会侵犯您的完整性。

insert into table1 
select a.Top_ID, Column2, Column3, ColumnX 
from table1 t1
outer apply (select max(id_column) + 1as Top_ID from table1) as a 
where t1.Id = 1

1
投票

好的,我找到了使用临时表的方法

SELECT * INTO #TmpTbl
FROM table1 WHERE Id = 5;
ALTER TABLE #TmpTbl
DROP COLUMN Id;
INSERT INTO table1 SELECT * FROM #TmpTbl;
DROP TABLE #TmpTbl
© www.soinside.com 2019 - 2024. All rights reserved.