Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Eine Datendatei kann mehr Felder enthalten, als Spalten in der Tabelle vorhanden sind. In diesem Artikel werden das Ändern von Nicht-XML- und XML-Formatdateien beschrieben, um eine Datendatei mit weiteren Feldern aufzunehmen, indem die Tabellenspalten den entsprechenden Datenfeldern zugeordnet und die zusätzlichen Felder ignoriert werden.
Weitere Informationen finden Sie unter Erstellen einer Formatdatei mit bcp (SQL Server).
Hinweis
Eine Nicht-XML- oder XML-Formatdatei kann zum Massenimport einer Datendatei in die Tabelle mithilfe eines bcp-Hilfsprogramms , einer BULK INSERT (Transact-SQL) -Anweisung oder INSERT ... SELECT * FROM OPENROWSET BULK (Transact-SQL) Anweisung . Weitere Informationen finden Sie unter Verwenden einer Formatdatei zum Massenimport von Daten (SQL Server).
Hinweis
Diese Syntax, einschließlich Masseneinfügen, wird in Azure Synapse Analytics nicht unterstützt. Führen Sie in Azure Synapse Analytics und anderen Clouddatenbank-Plattformintegrationen Datenverschiebung über die COPY-Anweisung in Azure Data Factory oder mithilfe von T-SQL-Anweisungen wie COPY INTO und PolyBase aus.
Beispieltestbedingungen
Die Beispiele für geänderte Formatdateien in diesem Artikel basieren auf der Beispieltabelle myTestSkipField
und datendatei D:\BCP\myTestSkipField.bcp
. Ändern Sie den lokalen Dateispeicherort im Codebeispiel in einen Dateispeicherort auf Ihrem Computer.
Beispieltabelle
Das Skript erstellt eine Testdatenbank und eine Tabelle mit dem Namen myTestSkipField
. Führen Sie die folgenden Transact-SQL-Anweisungen in Microsoft SQL Server Management Studio (SSMS) aus:
CREATE DATABASE TestDatabase;
GO
USE TestDatabase;
CREATE TABLE myTestSkipField
(
PersonID smallint,
FirstName varchar(25),
LastName varchar(30)
);
Beispieldatendatei
Erstellen Sie die leere Datei D:\BCP\myTestSkipField.bcp
, und fügen Sie die folgenden Daten ein:
1,SkipMe,Anthony,Grosse
2,SkipMe,Alica,Fatnowna
3,SkipMe,Stella,Rosenhain
Erstellen Sie die Formatdateien
Wenn ein Massenimport für Daten aus myTestSkipField.bcp
in die myTestSkipField
-Tabelle ausgeführt werden soll, muss die Formatdatei folgende Funktionen ausführen:
- Der ersten Spalte (
PersonID
) das erste Datenfeld zuordnen. - Das zweite Datenfeld auslassen.
- Der zweiten Spalte (
FirstName
) das dritte Datenfeld zuordnen. - Der dritten Spalte (
LastName
) das vierte Datenfeld zuordnen.
Die einfachste Methode zum Erstellen der Formatdatei besteht darin, das bcp-Dienstprogrammzu verwenden. Erstellen Sie zunächst eine Basisformatdatei aus der vorhandenen Tabelle. Ändern Sie dann die Basisformatdatei so, dass sie der tatsächlichen Datendatei entspricht.
Erstellen Sie eine Nicht-XML-Formatdatei
Ausführliche Informationen finden Sie unter Verwendung von Nicht-XML-Formatdateien (SQL Server ). Im folgenden Befehl wird das bcp-Hilfsprogramm verwendet, um die Nicht-XML-Formatdatei myTestSkipField.fmt
zu erstellen, die auf dem Schema von myTestSkipField
basiert. Außerdem wird der Qualifizierer c
verwendet, um Zeichendaten anzugeben, wird t,
verwendet, um ein Komma als Feldabschlusszeichen anzugeben, und wird T
verwendet, um eine vertrauenswürdige Verbindung anzugeben, für die integrierte Sicherheit verwendet wird. Geben Sie folgenden Befehl an der Eingabeaufforderung ein:
bcp TestDatabase.dbo.myTestSkipField format nul -c -f D:\BCP\myTestSkipField.fmt -t, -T
Ändern der Nicht-XML-Formatdatei
Informationen zur Terminologie finden Sie unter Struktur von Nicht-XML-Formatdateien. Öffnen Sie D:\BCP\myTestSkipField.fmt
in Editor, und nehmen Sie die folgenden Änderungen vor:
- Kopieren Sie die gesamte Formatdateizeile für
FirstName
, und fügen Sie sie unmittelbar nachFirstName
in der nächsten Zeile ein. - Setzen Sie den Wert für die Reihenfolge der Felder der Hostdatei für die neue Zeile und alle nachfolgenden Zeilen um eins herauf.
- Erhöhen Sie den Wert für die Anzahl der Spalten, um die tatsächliche Anzahl der Felder in der Datendatei anzugeben.
- Ändern Sie die Spaltenreihenfolge auf dem Server für die zweite Zeile der Formatdatei von
2
in0
.
Vergleichen Sie die vorgenommenen Änderungen:
Vorher
13.0
3
1 SQLCHAR 0 7 "," 1 PersonID ""
2 SQLCHAR 0 25 "," 2 FirstName SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 30 "\r\n" 3 LastName SQL_Latin1_General_CP1_CI_AS
Nach
13.0
4
1 SQLCHAR 0 7 "," 1 PersonID ""
2 SQLCHAR 0 25 "," 0 FirstName SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 25 "," 2 FirstName SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 50 "\r\n" 3 LastName SQL_Latin1_General_CP1_CI_AS
Die geänderte Formatdatei entspricht nun Folgendem:
- 4 Datenfelder
- Das erste Datenfeld in
myTestSkipField.bcp
wird der ersten Spalte zugeordnet,myTestSkipField.. PersonID
- Das zweite Datenfeld in
myTestSkipField.bcp
ist keiner Spalte zugeordnet. - Das dritte Datenfeld in
myTestSkipField.bcp
wird der zweiten Spalte zugeordnet,myTestSkipField.. FirstName
- Das vierte Datenfeld in
myTestSkipField.bcp
ist der dritten Spalte zugeordnet,myTestSkipField.. LastName
Erstellen Sie eine XML-Formatdatei
Überprüfen Sie XML-Formatdateien (SQL Server) auf ausführliche Informationen. Im folgenden Befehl wird das bcp-Hilfsprogramm verwendet, um die XML-Formatdatei myTestSkipField.xml
zu erstellen, die auf dem Schema von myTestSkipField
basiert.
- Der Qualifizierer
c
wird verwendet, um Zeichendaten anzugeben. -
t,
wird verwendet, um ein Komma als Feldterminator anzugeben. -
T
wird verwendet, um eine vertrauenswürdige Verbindung mit integrierter Sicherheit anzugeben. - Der
x
-Qualifizierer muss verwendet werden, um eine XML-basierte Formatdatei zu generieren.
Geben Sie folgenden Befehl an der Eingabeaufforderung ein:
bcp TestDatabase.dbo.myTestSkipField format nul -c -x -f D:\BCP\myTestSkipField.xml -t, -T
Ändern Sie die XML-Formatdatei
Informationen zur Terminologie finden Sie unter Schemasyntax für XML-Formatdateien. Öffnen Sie D:\BCP\myTestSkipField.xml
in Editor, und nehmen Sie die folgenden Änderungen vor:
- Kopieren Sie das gesamte zweite Feld, und fügen Sie es unmittelbar nach dem zweiten Feld in der nächsten Zeile ein.
- Erhöhen Sie den
FIELD ID
Wert für das neueFIELD
und für die einzelnen nachfolgendenFIELD
Werte um 1. - Erhöhen Sie den
COLUMN SOURCE
Wert um 1 fürFirstName
, undLastName
spiegeln Sie die überarbeitete Zuordnung wider.
Vergleichen Sie die vorgenommenen Änderungen:
Vorher
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="7"/>
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="25" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="PersonID" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="2" NAME="FirstName" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="3" NAME="LastName" xsi:type="SQLVARYCHAR"/>
</ROW>
</BCPFORMAT>
Nach
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="7"/>
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="25" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="25" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="PersonID" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="3" NAME="FirstName" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="4" NAME="LastName" xsi:type="SQLVARYCHAR"/>
</ROW>
</BCPFORMAT>
Die geänderte Formatdatei entspricht nun Folgendem:
- 4 Datenfelder
-
FIELD
1, das 1 entsprichtCOLUMN
, wird der ersten Tabellenspalte zugeordnet,myTestSkipField.. PersonID
-
FIELD
2 entsprichtCOLUMN
keinem und ist somit keiner Tabellenspalte zugeordnet. -
FIELD
3, das 3 entsprichtCOLUMN
, wird der zweiten Tabellenspalte zugeordnet,myTestSkipField.. FirstName
-
FIELD
4, das 4 entsprichtCOLUMN
, wird der dritten Tabellenspalte zugeordnet,myTestSkipField.. LastName
Importieren Sie Daten mithilfe einer Formatdatei zum Überspringen eines Datenfelds
In den Beispielen werden die in diesem Artikel erstellten Beispieldatenbank-, Datendatei- und Formatdateien verwendet.
Verwenden Sie die bcp und die Nicht-XML-Formatdatei
Geben Sie folgenden Befehl an der Eingabeaufforderung ein:
bcp TestDatabase.dbo.myTestSkipField IN D:\BCP\myTestSkipField.bcp -f D:\BCP\myTestSkipField.fmt -T
Verwenden von bcp- und XML-Formatdateien (SQL Server)
Geben Sie folgenden Befehl an der Eingabeaufforderung ein:
bcp TestDatabase.dbo.myTestSkipField IN D:\BCP\myTestSkipField.bcp -f D:\BCP\myTestSkipField.xml -T
Verwenden von BULK INSERT (Transact-SQL) und Nicht-XML-Formatdatei
Führen Sie die folgenden Transact-SQL-Anweisungen in Microsoft SQL Server Management Studio (SSMS) aus:
USE TestDatabase;
GO
TRUNCATE TABLE myTestSkipField;
BULK INSERT dbo.myTestSkipField
FROM 'D:\BCP\myTestSkipField.bcp'
WITH (FORMATFILE = 'D:\BCP\myTestSkipField.fmt');
GO
-- review results
SELECT * FROM TestDatabase.dbo.myTestSkipField;
Verwenden von BULK INSERT (Transact-SQL) und XML-Formatdateien (SQL Server)
Führen Sie die folgenden Transact-SQL-Anweisungen in Microsoft SQL Server Management Studio (SSMS) aus:
USE TestDatabase;
GO
TRUNCATE TABLE myTestSkipField;
BULK INSERT dbo.myTestSkipField
FROM 'D:\BCP\myTestSkipField.bcp'
WITH (FORMATFILE = 'D:\BCP\myTestSkipField.xml');
GO
-- review results
SELECT * FROM TestDatabase.dbo.myTestSkipField;
Verwenden von OPENROWSET BULK (Transact-SQL) und Nicht-XML-Formatdatei
Führen Sie die folgenden Transact-SQL-Anweisungen in Microsoft SQL Server Management Studio (SSMS) aus:
USE TestDatabase;
GO
TRUNCATE TABLE myTestSkipField;
INSERT INTO dbo.myTestSkipField
SELECT *
FROM OPENROWSET (
BULK 'D:\BCP\myTestSkipField.bcp',
FORMATFILE = 'D:\BCP\myTestSkipField.fmt'
) AS t1;
GO
-- review results
SELECT * FROM TestDatabase.dbo.myTestSkipField;
Verwenden von OPENROWSET BULK (Transact-SQL) und XML-Formatdateien (SQL Server)
Führen Sie die folgenden Transact-SQL-Anweisungen in Microsoft SQL Server Management Studio (SSMS) aus:
USE TestDatabase;
GO
TRUNCATE TABLE myTestSkipField;
INSERT INTO dbo.myTestSkipField
SELECT *
FROM OPENROWSET (
BULK 'D:\BCP\myTestSkipField.bcp',
FORMATFILE = 'D:\BCP\myTestSkipField.xml'
) AS t1;
GO
-- review results
SELECT * FROM TestDatabase.dbo.myTestSkipField;