Je modifie la structure d'une base de données. Le contenu de plusieurs colonnes du tableau FinancialInstitution doit être transféré dans le tableau Personne . FinancialInstitution est lié à la personne avec une clé étrangère. Chaque institution financière a besoin de l'ID de sa personne correspondante. Ainsi, pour chaque nouvelle ligne insérée dans Person, l'ID de cette nouvelle ligne (IDENTITY) doit être recopié dans la ligne correspondante de FinancialInstitution.
La façon évidente de le faire est un code T-SQL itératif. Mais je suis intéressé de savoir s'il est possible de le faire uniquement avec des opérations basées sur des ensembles.
J'ai imaginé que le niveau interne d'une telle demande serait quelque chose comme:
INSERT INTO Person (Street1, Number1, City1, State1, PostCode1, CountryId1, WorkDirectPhone1, Fax1, Email1)
OUTPUT inserted.Id, FinancialInstitution.Id
SELECT Id, Street, Number, City, [State], PostCode, CountryId, PhoneNumber, Fax, Email
FROM FinancialInstitution;
Malheureusement, il semble que OUTPUT ne puisse pas être corrélé de cette façon ...
la source
Person
? Ou mettre à jour ceux existants? Ou voulez-vous insérer dansPerson
et ensuiteUPDATE FinancialInstitution
?Réponses:
Je suppose que vous pourriez (ab) utiliser
MERGE
pour cela. Créez d'abord une table (temporaire):Puis
MERGE
dansPerson
(au lieu deINSERT
), vous pouvez donc utiliser les colonnes des tables impliquées dans laOUTPUT
clause:Utilisez ensuite la table temporaire pour
UPDATE FinancialInstitution
:Testez à: SQL-Fiddle
la source