Je veux copier N nombre d'enregistrements dans une table qui est facile avec un INSERT SELECT mais après l'insertion je veux une liste montrant oldId et newId. Disons donc que j'ai une instruction SELECT qui retourne:Comment puis-je cloner des enregistrements dans une table et connaître les nouveaux et anciens ID?
ID | Name
3 | Test A
4 | Test B
5 | Test C
Si je fais un SELECT INTO de cela, il insère 3 nouvelles clés primaires. Je veux une liste montrant les nouveaux et anciens Ids par ex.
3 | 49
4 | 50
5 | 51
Je sais comment faire avec des boucles, des curseurs, SCOPE_IDENTITY(), ou tables temporaires etc avec de nombreuses lignes de code, mais je me demandais s'il y a un moyen de couperet pour obtenir la nouvelle liste/vieux dans une ligne de SQL après INSERT SELECT par exemple
INSERT INTO tbl(Name)
SELECT Name
FROM tbl
WHERE blah = 1
.
SELECT New_Old_Ids()
Et je ne peux pas joindre à la table pour lui-même parce que « nom » est pas unique, donc je suis à la recherche d'une sorte de construit en fonction SQL. Ce n'est probablement pas possible mais j'ai pensé que je demanderais.
Je suis sur SQL Server 2005.
Vive Matthew
Salut à tous. Il y a quelques bonnes idées. Je n'ai jamais entendu parler de OUTPUT alors je vais y jeter un coup d'œil. J'utilise la colonne oldId pour le moment mais j'espère qu'il existe un gourou SQL avec une solution d'une seule ligne? –