首页 > 解决方案 > 复制整行不包括标识符列

问题描述

我正在尝试将新行插入到表中,该表是除标识符之外的另一行的精确副本。以前我没有遇到过这个问题,因为有一个 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 列,而不在INSERTandSELECT语句中命名其他列(这很多)。

标签: sql-servercopy

解决方案


在下面的代码中,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

推荐阅读