Importieren von Massendaten mithilfe von BULK INSERT oder OPENROWSET(BULK...)

Aktualisiert: 17. Juli 2006

In diesem Thema erhalten Sie einen Überblick zum Verwenden der Transact-SQL BULK INSERT-Anweisung und der INSERT...SELECT * FROM OPENROWSET(BULK...)-Anweisung, mit denen ein Massenimport von Daten aus einer Datendatei in eine Microsoft SQL Server-Tabelle ermöglicht wird. In diesem Thema werden zudem Sicherheitsaspekte beim Verwenden von BULK INSERT und OPENROWSET(BULK…) berücksichtigt, und es wird mit diesen Methoden ein Massenimport aus einer Remotedatenquelle ausgeführt.

ms175915.note(de-de,SQL.90).gifHinweis:
Für die Verwendung von BULK INSERT oder OPENROWSET(BULK…) ist es wichtig, nachvollziehen zu können, wie Identitätswechsel in SQL Server 2005 behandelt werden. Weitere Informationen finden Sie unter "Sicherheitsüberlegungen" weiter unten in diesem Thema.

BULK INSERT-Anweisung

BULK INSERT lädt Daten aus einer Datendatei in eine Tabelle. Die Funktionalität ähnelt der Option in des bcp-Befehls; die Datendatei wird jedoch vom SQL Server-Prozess gelesen. Eine Beschreibung der BULK INSERT-Syntax finden Sie unter BULK INSERT (Transact-SQL).

Beispiele

Beispiele zu BULK INSERT finden Sie unter:

OPENROWSET(BULK…)-Funktion

In SQL Server 2005 ist erstmals der OPENROWSET-Massenrowsetanbieter enthalten, auf den durch Aufrufen der OPENROWSET-Funktion und Angeben der Option BULK zugegriffen wird. Mithilfe der OPENROWSET(BULK…)-Funktion können Sie auf Remotedaten zugreifen, indem Sie mithilfe eines OLE DB-Anbieters eine Verbindung mit einer Remotedatenquelle (z. B. einer Datendatei) herstellen.

Für den Massenimport von Daten wird OPENROWSET(BULK…) aus der SELECT…FROM-Klausel einer INSERT-Anweisung aufgerufen. Die grundlegende Syntax zum Massenimportieren von Daten lautet:

INSERT ... SELECT * FROM OPENROWSET(BULK...)

Wenn OPENROWSET(BULK...) in einer INSERT-Anweisung verwendet wird, werden damit auch Tabellenhinweise unterstützt. Zusätzlich zu den regulären Tabellenhinweisen, z. B. TABLOCK, sind für die BULK-Klausel die folgenden speziellen Tabellenhinweise möglich: IGNORE_CONSTRAINTS (ignoriert nur die CHECK-Einschränkungen), IGNORE_TRIGGERS, KEEPDEFAULTS und KEEPIDENTITY. Weitere Informationen finden Sie unter Tabellenhinweis (Transact-SQL).

Informationen zu den zusätzlichen Verwendungsmöglichkeiten der Option BULK finden Sie unter OPENROWSET (Transact-SQL).

Beispiele

Beispiele für die Verwendung von INSERT...SELECT * FROM OPENROWSET(BULK...)-Anweisungen finden Sie in den folgenden Themen:

Überlegungen zur Sicherheit

Wenn ein Benutzer eine SQL Server-Anmeldung verwendet, wird das Sicherheitsprofil des SQL Server-Prozesskontos verwendet.

Wenn sich hingegen ein SQL Server-Benutzer mithilfe der Windows-Authentifizierung anmeldet, können von diesem Benutzer nur die Dateien gelesen werden, auf die über das Benutzerkonto zugegriffen werden kann. Das Sicherheitsprofil des SQL Server-Prozesses wird dabei nicht berücksichtigt.

Angenommen, ein Benutzer hat sich mithilfe der Windows-Authentifizierung an einer Instanz von SQL Server angemeldet. Damit der Benutzer zum Importieren von Daten aus einer Datendatei in eine SQL Server-Tabelle BULK INSERT oder OPENROWSET verwenden kann, muss das Konto über Lesezugriff für die Datendatei verfügen. Durch den Zugriff auf die Datendatei kann der Benutzer Daten aus der Datei in eine Tabelle importieren, selbst wenn für den SQL Server-Prozess keine Berechtigung zum Zugreifen auf die Datei verfügbar ist. Der Benutzer muss dem SQL Server-Prozess keine Dateizugriffsberechtigung erteilen.

SQL Server und Microsoft Windows können so konfiguriert werden, dass von einer Instanz von SQL Server eine Verbindung mit einer anderen Instanz von SQL Server hergestellt wird, indem die Anmeldeinformationen eines authentifzierten Windows-Benutzers weitergeleitet werden. Diese Möglichkeit wird als Identitätswechsel oder Delegierung bezeichnet. Es ist wichtig zu wissen, wie in SQL Server 2005 die Sicherheit für den Benutzeridentitätswechsel behandelt wird, wenn Sie BULK INSERT oder OPENROWSET verwenden. Durch einen Benutzeridentitätswechsel kann sich die Datendatei auf einem anderen Computer befinden als der SQL Server-Prozess oder der Benutzer selbst. Wenn beispielsweise ein Benutzer auf Computer_A Zugriff auf eine Datendatei auf Computer_B hat und die Delegierung der Anmeldeinformationen entsprechend festgelegt ist, kann der Benutzer eine Verbindung mit einer Instanz von SQL Server herstellen, die auf Computer_C ausgeführt wird, auf die Datendatei auf Computer_B zugreifen und einen Massenimport von Daten aus der Datei in eine Tabelle auf Computer_C ausführen. Weitere Informationen finden Sie unter Identitätswechsel (Übersicht).

ms175915.note(de-de,SQL.90).gifHinweis:
Durch die Art und Weise, wie in SQL Server 2005 der Zugriff auf Dateien gesteuert wird, wird ein mögliches Sicherheitsrisiko aus Microsoft SQL Server 2000 und früheren Versionen behoben. Bisher basierte der Zugriff auf externe Dateien nach der Authentifizierung eines Benutzers auf dem Sicherheitsprofil des SQL Server-Prozesses. Wenn für den SQL Server-Prozess der Lesezugriff auf die Datei möglich war, konnte der Benutzer die Datei mithilfe von BULK INSERT importieren und auf den Inhalt der Datei zugreifen, auch wenn der Benutzer nicht über Dateizugriff verfügte, jedoch Mitglied der festen Serverrolle bulkadmin war.

Massenimport von einer Remotedatendatei

Die Datendatei muss zwischen zwei Computern freigegeben sein, um mithilfe von BULK INSERT oder INSERT...SELECT * FROM OPENROWSET(BULK...) den Massenimport von Daten von einen Computer zum anderen auszuführen. Verwenden Sie zum Angeben einer freigegebenen Datendatei den UNC-Namen (Universal Naming Convention) im allgemeinen Format **\\Servername\Sharename\Path\**Filename. Das von SQL Server verwendete Benutzerkonto muss bereits über die Berechtigungen verfügen, die zum Lesen der Datei auf dem Remotedatenträger erforderlich sind.

Beispielsweise wird mithilfe der folgenden BULK INSERT-Anweisung ein Massenimport von Daten aus der Datendatei newdata.txt in die SalesOrderDetail-Tabelle der AdventureWorks-Datenbank ausgeführt. Diese Datendatei befindet sich im freigegebenen Ordner \dailyorders auf dem salesforce-Netzwerkfreigabeverzeichnis des computer2-Systems.

BULK INSERT AdventureWorks.Sales.SalesOrderDetail
   FROM '\\computer2\salesforce\dailyorders\neworders.txt';
GO
ms175915.note(de-de,SQL.90).gifHinweis:
Diese Einschränkung gilt nicht für das Dienstprogramm bcp, da die Datei vom Client unabhängig von SQL Server gelesen wird.

Siehe auch

Konzepte

Importieren und Exportieren von Massendaten
Informationen zu Massenimport- und Massenexportvorgängen
Grundlegende Richtlinien für den Massenimport von Daten

Andere Ressourcen

INSERT (Transact-SQL)
Identitätswechsel (Übersicht)
INSERT (Transact-SQL)
SELECT-Klausel (Transact-SQL)
OPENROWSET (Transact-SQL)
SELECT (Transact-SQL)
FROM (Transact-SQL)
bcp (Dienstprogramm)
BULK INSERT (Transact-SQL)

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

17. Juli 2006

Geänderter Inhalt:
  • Der Inhalt zum Dienstprogramm bcp wurde in das neue Thema Importieren und Exportieren von Massendaten mithilfe des Dienstprogramms bcp verschoben.
  • Der Abschnitt "OPENROWSET(BULK…)-Funktion" wurde überarbeitet.
  • Die Abschnitte "Sicherheitsüberlegungen" und "Massenimport von einer Remotedatendatei" wurden eingefügt.
  • Es wurden Links für "Zusätzliche Beispiele" zu konzeptionellen Themen mit Beispielen hinzugefügt.

05. Dezember 2005

Neuer Inhalt:
  • Die Erläuterung zum Verwenden eines Transact-SQL-Befehls für den Datenimport aus einer Remotedatendatei wurde hinzugefügt.