Einfügen von Reihen mithilfe der Unterabfragen INSERT und SELECT
Mit einer SELECT-Unterabfrage in der INSERT-Anweisung fügen Sie einer Tabelle Werte hinzu, die aus einer oder mehreren anderen Tabellen oder Sichten stammen. Das Verwenden einer SELECT-Unterabfrage ermöglicht außerdem das gleichzeitige Einfügen mehrerer Zeilen.
Im folgenden Beispiel fügt die INSERT-Anweisung einige der Daten aus allen Zeilen der Sales.SalesReason-Tabelle in AdventureWorks2008R2, in denen SalesReason als Marketing angegeben ist, in eine separate Tabelle ein:
USE AdventureWorks2008R2;
GO
CREATE TABLE MySalesReason (
SalesReasonID int NOT NULL,
Name nvarchar(50),
ModifiedDate datetime);
GO
INSERT INTO MySalesReason
SELECT SalesReasonID, Name, ModifiedDate
FROM AdventureWorks2008R2.Sales.SalesReason
WHERE ReasonType = N'Marketing';
GO
SELECT SalesReasonID, Name, ModifiedDate
FROM MySalesReason;
GO
Die Auswahlliste der Unterabfrage muss mit der Spaltenliste der INSERT-Anweisung übereinstimmen. Wenn keine Spaltenliste angegeben ist, muss die Auswahlliste mit den Spalten in der Tabelle oder Sicht übereinstimmen, in die Daten eingefügt werden.
Eine weitere Verwendungsmöglichkeit der INSERT...SELECT-Anweisung ist das Einfügen von Daten aus einer Quelle außerhalb von SQL Server. Die SELECT- kann in der INSERT-Anweisung wie folgt verwendet werden:
Verweisen auf eine Remotetabelle auf einem Verbindungsserver mithilfe eines vierteiligen Namens. Weitere Informationen finden Sie unter Identifizieren einer Datenquelle mithilfe eines Verbindungsservernamens.
Verweisen auf eine Remotetabelle mithilfe von OPENROWSET. Weitere Informationen finden Sie unter Identifizieren einer Datenquelle mithilfe eines Ad-hoc-Namens.
Verwenden des Resultsets einer auf einem Remoteserver ausgeführten Abfrage. Weitere Informationen finden Sie unter Verwenden von Pass-Through-Abfragen als Tabellen.