Я пытаюсь вставить новую строку в таблицу, которая является точной копией другой строки, за исключением идентификатора. Раньше у меня не было проблемы, потому что был ID-столбец, который не заполнялся автоматически. Таким образом, я мог бы просто скопировать строку, подобную этой
INSERT INTO table1 SELECT * FROM table1 WHERE Id = 5
, а затем вручную изменить идентификатор следующим образом:
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
Недавно идентификатор столбца изменился, чтобы не заполняться вручную (что я такжекак лучше). Но это приводит к ошибке, которую я, очевидно, не могу заполнить в этом столбце, в то время как IDENTITY_INSERT
имеет значение false. К сожалению, я не имею права использовать SET IDENTITY_INSERT IdentityTable ON/OFF
до и после заявления, которое я также хотел бы избежать в любом случае.
Я ищу способ вставить всю строку, исключая столбец Id, без указания имен столбцов в выражении INSERT
и SELECT
(что довольно много).