Freigeben über


Verwenden einer Formatdatei zum Zuordnen von Tabellenspalten zu Data-File Feldern (SQL Server)

Eine Datendatei kann Felder enthalten, die in einer anderen Reihenfolge als die entsprechenden Spalten in der Tabelle angeordnet sind. In diesem Thema werden sowohl Nicht-XML- als auch XML-Formatdateien dargestellt, die geändert wurden, um eine Datendatei aufzunehmen, deren Felder in einer anderen Reihenfolge als die Tabellenspalten angeordnet sind. Die geänderte Formatdatei ordnet die Datenfelder ihren entsprechenden Tabellenspalten zu.

Hinweis

Entweder kann eine Nicht-XML-Formatdatei oder eine XML-Formatdatei verwendet werden, um eine Datendatei mithilfe eines bcp-Befehls, einer BULK INSERT-Anweisung oder einer INSERT... SELECT * FROM OPENROWSET(BULK...)-Anweisung in die Tabelle zu importieren. Weitere Informationen finden Sie unter Verwenden einer Formatdatei zum Massenimport von Daten (SQL Server).For more information, see Use a Format File to Bulk Import Data (SQL Server).

Beispieltabelle und Datendatei

Die Beispiele für geänderte Formatdateien in diesem Thema basieren auf der folgenden Tabelle und Datendatei.

Beispieltabelle

Die Beispiele in diesem Thema erfordern, dass eine Tabelle mit dem Namen myTestOrder in der AdventureWorks2012-Beispieldatenbank unter dem dbo Schema erstellt werden muss. Führen Sie zum Erstellen dieser Tabelle im ABFRAGE-Editor von SQL Server Management Studio den folgenden Code aus:

USE AdventureWorks2012;  
GO  
CREATE TABLE myTestOrder   
   (  
   Col1 smallint,  
   Col2 nvarchar(50) ,  
   Col3 nvarchar(50) ,   
   Col4 nvarchar(50)   
   );  
GO  
  

Datendatei

Die Datendatei enthält myTestOrder-c.txtdie folgenden Datensätze:

DataField3,DataField2,1,DataField4  
DataField3,DataField2,1,DataField4  
DataField3,DataField2,1,DataField4  
  

Zum Massenimport von Daten aus myTestSkipCol2-c.dat in die myTestSkipCol-Tabelle muss die Formatdatei das erste Datenfeld Col3 zuordnen, das zweite Datenfeld Col2, das dritte Datenfeld Col1 und das vierte Datenfeld Col4.

Verwenden einer Nicht-XML-Formatdatei

Sie können die Reihenfolge einer Spaltenzuordnung ändern, indem Sie den Positionswert der Spalte ändern, um die Position des entsprechenden Datenfelds anzugeben.

Die folgende Nicht-XML-Formatdatei stellt eine Formatdatei dar, myTestOrder.fmtdie die Felder myTestOrder-c.txt den Spalten der myTestOrder Tabelle zuordnet. Informationen zum Erstellen der Datendatei und -tabelle finden Sie weiter oben in diesem Thema unter "Beispieltabelle und Datendatei". Die Formatdatei verwendet das Zeichendatenformat.

Die Formatdatei enthält die folgenden Informationen:

9.0  
4  
1       SQLCHAR       0       100     ","     3     Col3               SQL_Latin1_General_CP1_CI_AS  
2       SQLCHAR       0       100     ","     2     Col2               SQL_Latin1_General_CP1_CI_AS  
3       SQLCHAR       0       7       ","     1     Col1               ""  
4       SQLCHAR       0       100     "\r\n"  4     Col4               SQL_Latin1_General_CP1_CI_AS  
  

Beispiel

Im folgenden Beispiel wird eine BULK INSERT Anweisung verwendet, um Daten aus der myTestOrder-c.txt Datendatei mithilfe der myTestOrder.fmt Nicht-XML-Formatdatei in die myTestOrder Beispieltabelle zu importieren.

Führen Sie im SQL Server Management Studio-Abfrage-Editor Folgendes aus:

USE AdventureWorks2012;  
GO  
BULK INSERT myTestOrder  
FROM 'C:\myTestOrder-c.txt'   
WITH (formatfile='C:\myTestOrder.fmt');  
GO  
  

Verwenden einer XML-Formatdatei

Die folgende Nicht-XML-Formatdatei stellt eine Formatdatei dar, myTestOrder.xmldie die Felder in myTestOrder-c.txt den Spalten der myTestOrder Tabelle zuordnet. Weitere Informationen zum Erstellen der Datendatei und -tabelle finden Sie weiter oben in diesem Thema unter "Beispieltabelle und Datendatei".

Die myTestOrder.xml Formatdatei enthält die folgenden Informationen:

<?xml version="1.0"?>  
<BCPFORMAT xmlns="https://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="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>  
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>  
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="7"/>  
  <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>  
 </RECORD>  
 <ROW>  
  <COLUMN SOURCE="3" NAME="Col1" xsi:type="SQLSMALLINT"/>  
  <COLUMN SOURCE="2" NAME="Col2" xsi:type="SQLNVARCHAR"/>  
  <COLUMN SOURCE="1" NAME="Col3" xsi:type="SQLNVARCHAR"/>  
  <COLUMN SOURCE="4" NAME="Col4" xsi:type="SQLNVARCHAR"/>  
 </ROW>  
</BCPFORMAT>  
  

Hinweis

Informationen zur Syntax des XML-Schemas und zusätzliche Beispiele für XML-Formatdateien finden Sie unter XML-Formatdateien (SQL Server).For information about the syntax of the XML Schema and additional samples of XML format files, see XML Format Files (SQL Server).

Beispiel

Im folgenden Beispiel wird der OPENROWSET Massenzeilenanbieter verwendet, um Daten aus der myTestOrder-c.txt Datendatei unter Verwendung der myTestOrder.xml XML-Formatdatei in die myTestOrder Beispieltabelle zu importieren. Die INSERT... SELECT Anweisung gibt die Spaltenliste in der Auswahlliste an.

Führen Sie im SQL Server Management Studio-Abfrage-Editor den folgenden Code aus:

USE AdventureWorks2012;  
GO  
INSERT INTO myTestOrder   
  SELECT Col1, Col2, Col3, Col4  
      FROM  OPENROWSET(BULK  'C:\myTestOrder-c.txt',  
      FORMATFILE='C:\myTestOrder.Xml'    
       ) AS t1;  
GO  
  

Siehe auch

Überspringen einer Tabellenspalte mithilfe einer Formatdatei (SQL Server)
Verwenden einer Formatdatei zum Überspringen eines Datenfelds (SQL Server)