Lors de l'insertion de plusieurs enregistrements dans une table avec une colonne d'identité, l'obtention des valeurs d'identité nouvellement générées peut être cruciale pour les manipulations de données ultérieures . Cet article explique comment y parvenir sans utiliser de curseur dans Microsoft SQL Server 2005.
Considérez le scénario suivant : Vous disposez de deux tables, la table A avec une colonne d'identité (id). et le tableau B, qui contient des données connexes. Vous souhaitez insérer des enregistrements de la table B dans la table A et obtenir les valeurs d'identité respectives pour mettre à jour la colonne NewId dans la table B.
SQL Server 2005 fournit un mécanisme pratique via la clause OUTPUT pour récupérer les valeurs d'identité générées lors des opérations d'insertion. Le code suivant montre comment utiliser cette fonctionnalité :
DECLARE @output TABLE (id int) INSERT INTO A (fname, lname) OUTPUT INSERTED.id INTO @output SELECT fname, lname FROM B
Cette requête insérera les enregistrements de la table B dans la table A et stockera les valeurs d'identité dans une variable de table appelée @output. La variable de table @output contiendra une seule colonne (id) avec les valeurs d'identité nouvellement générées, vous permettant de les récupérer et de les utiliser pour un traitement ultérieur.
Considérez les exemples de tables et de données fourni dans la description du problème. Après avoir exécuté le code ci-dessus :
-- Insert records into Table A and retrieve identity values DECLARE @output TABLE (id int) INSERT INTO A (fname, lname) OUTPUT INSERTED.id INTO @output SELECT fname, lname FROM B -- Display the identity values in the table variable SELECT * FROM @output
Le résultat sera un tableau avec les valeurs d'identité des lignes insérées :
id ------- 1 2 3
Ces valeurs d'identité pourront ensuite être utilisées pour mettre à jour le NewId colonne du tableau B en conséquence.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!