我正在尝试在表中插入新行,该表是除标识符外的另一行的精确副本。以前我没有这个问题,因为有一个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列的整个行,而无需在INSERT
和SELECT
语句(它们很多)中互相命名。