Maison >base de données >tutoriel mysql >Comment insérer efficacement des données dans plusieurs tables SQL Server simultanément ?
Insertion simultanée dans plusieurs tables SQL Server
L'insertion de données dans plusieurs tables simultanément peut être un défi, en particulier lorsque les tables ont des relations de clé étrangère . Une approche courante consiste à utiliser la méthode INSERT-SELECT-INSERT, qui consiste à insérer des données dans la première table, à récupérer la clé primaire, puis à insérer cette clé dans la deuxième table.
Cependant, cette méthode peut devenir inefficace. pour des insertions à grande échelle. Pour de tels scénarios, SQL Server propose une solution alternative :
insert into [table1] ([data]) output inserted.id, inserted.data into table2 select [data] from [external_table]
Cette requête insère des données dans les deux tables en une seule transaction. La clause OUTPUT récupère la clé primaire et les données insérées dans la première table et les insère dans la deuxième table.
Exemple :
CREATE TABLE [table1] ( [id] [int] IDENTITY(1,1) NOT NULL, [data1] [varchar](255) NOT NULL, CONSTRAINT [PK_table1] PRIMARY KEY CLUSTERED ([id] ASC) ); CREATE TABLE [table2] ( [id] [int] IDENTITY(1,1) NOT NULL, [table1_id] [int] NOT NULL, [data2] [varchar](255) NOT NULL, CONSTRAINT [PK_table2] PRIMARY KEY CLUSTERED ([id] ASC) ); INSERT INTO [table1] ([data1]) OUTPUT INSERTED.ID, INSERTED.DATA1 INTO [table2] ([table1_id], [data2]) SELECT [data1] FROM [external_table];
Cette requête insérera des données de la table externe vers la table1 et la table2 en une seule opération. Les données de la table 1 seront utilisées pour créer la relation de clé étrangère dans la table2.
Gestion de différentes colonnes de données :
Dans certains scénarios, les colonnes de données de la source et les tables de destination peuvent différer. Dans ce cas, l'instruction MERGE peut être utilisée :
MERGE INTO [table1] AS t USING [external_table] AS s ON 1=0 -- modify this predicate as necessary WHEN NOT MATCHED THEN INSERT (data) VALUES (s.[col1]) OUTPUT INSERTED.ID, s.[col2] INTO [table2];
Cette requête effectue une opération upsert, en insérant des lignes dans la table1 qui n'existent pas déjà et en mettant à jour les lignes existantes. La clause OUTPUT récupère la clé primaire insérée et les données correspondantes de la table externe et les insère dans la table2.
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!