Y at-il un moyen de stocker les valeurs d'identité juste avant une insertion et les nouvelles valeurs d'identité juste après une insertion dans une table de mappage? La table de mappage sera utilisée pour mettre à jour les clés étrangères dans d'autres tables.Identité du magasin avant et après un insert?
Initialement, je pensais que c'était possible avec la clause OUTPUT INTO, mais seules les valeurs insérées sont insérables. Je ne sais pas comment utiliser la clause OUTPUT pour faire le travail. Peut-être une sorte de sous-requête?
Peut-être que c'est trop compliqué et qu'il existe un moyen d'utiliser SCOPE_IDENTITY et des sous-requêtes pour cela.
Toute aide serait grandement appréciée.
p.s. Oui, je sais que je peux résoudre cela en "réservant" des identités (insérer des lignes factices puis supprimer ou DBCC CHECKINDENT), enregistrer les identités nouvellement "réservées" et les anciennes identités dans la table de mappage, mettre à jour la table avec les nouvelles identités et enfin faire un insert avec INSERT_IDENTITIES activé - mais c'est désordonné. Ceci s'applique à SQL Server 2008 R2.
Voici ce qui ne fonctionne pas:
INSERT
[SomeTable]
OUTPUT
INSERTED.[Id],
[Id] -- This doesn't work
INTO
[#mappingTable]
SELECT
(SomeColumns)
FROM
[#someOtherTable];
Bummer, cela ne peut pas être fait avec un UPDATE sur la table de mappage avec un CTE qui fait l'insertion et a une clause OUTPUT retournant la nouvelle identité? – user514848