Я хочу скопировать N записей в таблице, что легко с INSERT SELECT, однако после вставки мне нужен список, показывающий oldId и newId. Допустим, у меня есть оператор SELECT, который возвращает:
ID | Name
3 | Test A
4 | Test B
5 | Test C
Если я делаю SELECT INTO из этого, он вставляет 3 новых PK. Мне нужен список, показывающий новые и старые идентификаторы, например
3 | 49
4 | 50
5 | 51
Я знаю, как это сделать с помощью циклов, курсоров, Scope_Identity () или временных таблиц и т. Д. Со многими строками кода, но мне было интересно, есть ли более разумный способ получить новый / старый список в одной строке SQL после INSERT SELECT например
INSERT INTO tbl(Name)
SELECT Name
FROM tbl
WHERE blah = 1
.
SELECT New_Old_Ids()
И я не могу присоединить таблицу к себе, потому что «Имя» не уникально, поэтому я ищу какую-то встроенную функцию SQL. Это, вероятно, не возможно, но думал, что я спрошу.
Я нахожусь на SQL Server 2005.
Приветствие
Matthew