Gleichzeitiges Einfügen in mehrere SQL Server-Tabellen
Das gleichzeitige Einfügen von Daten in mehrere Tabellen kann eine Herausforderung sein, insbesondere wenn die Tabellen Fremdschlüsselbeziehungen haben . Ein gängiger Ansatz ist die Verwendung der INSERT-SELECT-INSERT-Methode, bei der Daten in die erste Tabelle eingefügt, der Primärschlüssel abgerufen und dieser Schlüssel dann in die zweite Tabelle eingefügt werden.
Diese Methode kann jedoch ineffizient werden für großflächige Einfügungen. Für solche Szenarien bietet SQL Server eine alternative Lösung:
insert into [table1] ([data]) output inserted.id, inserted.data into table2 select [data] from [external_table]
Diese Abfrage fügt Daten in beide Tabellen in einer einzigen Transaktion ein. Die OUTPUT-Klausel ruft den eingefügten Primärschlüssel und die Daten aus der ersten Tabelle ab und fügt sie in die zweite Tabelle ein.
Beispiel:
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];
Diese Abfrage fügt Daten ein von der externen Tabelle in Tabelle1 und Tabelle2 in einem einzigen Vorgang. Die Daten in Tabelle 1 werden verwendet, um die Fremdschlüsselbeziehung in Tabelle 2 zu erstellen.
Umgang mit unterschiedlichen Datenspalten:
In einigen Szenarien werden die Datenspalten in der Quelle und Zieltabellen können unterschiedlich sein. In diesem Fall kann die MERGE-Anweisung verwendet werden:
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];
Diese Abfrage führt einen Upsert-Vorgang durch, bei dem Zeilen in Tabelle1 eingefügt werden, die noch nicht vorhanden sind, und vorhandene Zeilen aktualisiert werden. Die OUTPUT-Klausel ruft den eingefügten Primärschlüssel und die entsprechenden Daten aus der externen Tabelle ab und fügt sie in Tabelle2 ein.
Das obige ist der detaillierte Inhalt vonWie fügt man Daten effizient gleichzeitig in mehrere SQL Server-Tabellen ein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!