Beibehalten von NULL-Werten oder Verwenden von Standardwerten während des Massenimports
Wenn Daten in eine Tabelle importiert werden, werden standardmäßig alle für die Spalten in der Tabelle definierten Standardwerte durch den Befehl bcp und die BULK INSERT-Anweisung überwacht. Wenn beispielsweise ein NULL-Feld in einem Datenfeld vorkommt, wird stattdessen der Standardwert für die Spalte geladen. Sowohl mit dem Befehl bcp als auch mit der BULK INSERT-Anweisung können Sie angeben, dass NULL-Werte beibehalten werden sollen.
Eine reguläre INSERT-Anweisung hingegen behält den NULL-Wert bei, statt einen Standardwert einzufügen. Die INSERT ... SELECT * FROM OPENROWSET(BULK...)-Anweisung zeigt dasselbe grundlegende Verhalten wie eine reguläre INSERT-Anweisung, unterstützt jedoch zusätzlich einen Tabellenhinweis zum Einfügen der Standardwerte.
Hinweis: |
---|
Beispiele für Formatdateien, die eine Tabellenspalte auslassen, finden Sie unter Überspringen einer Tabellenspalte mithilfe einer Formatdatei. |
Beispieltabelle und -datendatei
Zum Ausführen der Beispiele in diesem Thema müssen Sie eine Beispieltabelle und -datendatei erstellen.
Beispieltabelle
Die Beispiele erfordern, dass eine Tabelle mit dem Namen MyTestDefaultCol2 in der AdventureWorks-Beispieldatenbank unter dem Schema dbo erstellt wird. Führen Sie zum Erstellen dieser Tabelle im Microsoft SQL Server Management Studio-Abfrage-Editor folgende Anweisung aus:
USE AdventureWorks;
GO
CREATE TABLE MyTestDefaultCol2
(Col1 smallint,
Col2 nvarchar(50) DEFAULT 'Default value of Col2',
Col3 nvarchar(50)
);
GO
Beachten Sie, dass die zweite Tabellenspalte Col2
einen Standardwert hat.
Beispielformatdatei
Einige der Massenimportbeispiele verwenden die nicht im XML-Format vorliegende Datei MyTestDefaultCol2-f-c.Fmt
, die der MyTestDefaultCol2
-Tabelle genau entspricht. Geben Sie zum Erstellen dieser Formatdatei an der Microsoft Windows-Eingabeaufforderung folgendes ein:
bcp AdventureWorks..MyTestDefaultCol2 format nul -c -f C:\MyTestDefaultCol2-f-c.Fmt -t, -r\n -T
Informationen zum Erstellen von Formatdateien finden Sie unter Erstellen einer Formatdatei.
Beispieldatendatei
Das Beispiel verwendet die Beispieldatendatei MyTestEmptyField2-c.Dat
, die im zweiten Feld keine Werte enthält. Die Datendatei MyTestEmptyField2-c.Dat
enthält die folgenden Datensätze.
1,,DataField3
2,,DataField3
Beibehalten von NULL-Werten mit bcp oder BULK INSERT
Die folgenden Qualifizierer geben an, dass ein leeres Feld in der Datendatei seinen NULL-Wert während des Massenimportvorgangs beibehält, statt (ggf.) einen Standardwert für die Tabellenspalten zu übernehmen.
Befehl | Qualifizierer | Qualifizierertyp |
---|---|---|
bcp |
-k |
Schalter |
BULK INSERT |
KEEPNULLS1 |
Argument |
1 Für BULK INSERT muss, wenn Standardwerte nicht verfügbar sind, die Tabellenspalte für das Zulassen von NULL-Werten definiert sein.
Hinweis: |
---|
Diese Qualifizierer deaktivieren das Prüfen von DEFAULT-Definitionen in einer Tabelle durch diese Massenimportbefehle. Für gleichzeitige INSERT-Anweisungen werden jedoch DEFAULT-Definitionen erwartet. |
Weitere Informationen finden Sie unter bcp (Dienstprogramm) und BULK INSERT (Transact-SQL).
Beispiele
In den Beispielen dieses Abschnitts werden Massenimporte mithilfe von bcp oder BULK INSERT ausgeführt und NULL-Werte beibehalten.
Die zweite Tabellenspalte Col2 hat einen Standardwert. Das entsprechende Feld der Datendatei enthält eine leere Zeichenfolge. Wenn bcp oder BULK INSERT zum Importieren von Daten aus dieser Datendatei in die MyTestDefaultCol2-Tabelle verwendet wird, wird standardmäßig der Standardwert von Col2 eingefügt, sodass das folgende Ergebnis erzeugt wird:
|
|
|
|
|
|
Zum Einfügen von NULL
anstelle von Default value of Col2
müssen Sie den Schalter -k oder die Option KEEPNULL verwenden, wie in den folgenden bcp- und BULK INSERT-Beispielen gezeigt.
Verwenden von bcp und Beibehalten von NULL-Werten
Das folgende Beispiel zeigt, wie NULL-Werte in einem Befehl bcp beibehalten werden. Der Befehl bcp enthält folgende Schalter:
Schalter | Beschreibung |
---|---|
-f |
Gibt an, dass der Befehl eine Formatdatei verwendet. |
-k |
Gibt an, dass in leere Spalten während des Vorgangs keine Standardwerte eingefügt werden sollen, sondern ein NULL-Wert für diese Spalten beibehalten werden soll. |
-T |
Gibt an, dass das Dienstprogramm bcp eine vertrauenswürdige Verbindung mit SQL Server herstellt. |
Geben Sie an der Windows-Eingabeaufforderung folgendes ein.
bcp AdventureWorks..MyTestDefaultCol2 in C:\MyTestEmptyField2-c.Dat -f C:\MyTestDefaultCol2-f-c.Fmt -k -T
Verwenden von BULK INSERT und Beibehalten von NULL-Werten
Das folgende Beispiel zeigt, wie die Option KEEPNULLS in einer BULK INSERT-Anweisung verwendet wird. Führen Sie von einem Abfragetool, wie z. B. dem SQL Server Management Studio-Abfrage-Editor, folgende Anweisung aus:
USE AdventureWorks;
GO
BULK INSERT MyTestDefaultCol2
FROM 'C:\MyTestEmptyField2-c.Dat'
WITH (
DATAFILETYPE = 'char',
FIELDTERMINATOR = ',',
KEEPNULLS
);
GO
Beibehalten von Standardwerten mit INSERT ... SELECT * FROM OPENROWSET(BULK...)
Standardmäßig werden Spalten, die nicht in dem Massenladevorgang angegeben sind, durch INSERT ... SELECT * FROM OPENROWSET(BULK...) auf NULL festgelegt. Sie können jedoch angeben, dass die entsprechende Tabellenspalte für ein leeres Feld in der Datendatei (ggf.) den Standardwert verwendet. Zum Verwenden von Standardwerten geben Sie den folgenden Tabellenhinweis an:
Befehl | Qualifizierer | Qualifizierertyp |
---|---|---|
INSERT ... SELECT * FROM OPENROWSET(BULK...) |
WITH(KEEPDEFAULTS) |
Tabellenhinweis |
Hinweis: |
---|
Weitere Informationen finden Sie unter INSERT (Transact-SQL), SELECT (Transact-SQL), OPENROWSET (Transact-SQL) und Tabellenhinweis (Transact-SQL). |
Beispiele
Im folgenden INSERT ... SELECT * FROM OPENROWSET(BULK...)-Beispiel wird ein Massenimport von Daten ausgeführt, und die Standardwerte werden beibehalten.
Zum Ausführen der Beispiele müssen Sie die MyTestDefaultCol2-Beispieltabelle und die Datendatei MyTestEmptyField2-c.Dat
erstellen und die Formatdatei MyTestDefaultCol2-f-c.Fmt
verwenden. Weitere Informationen zum Erstellen dieser Beispiele finden Sie unter "Beispieltabelle und Datendatei" weiter oben in diesem Thema.
Die zweite Tabellenspalte Col2 hat einen Standardwert. Das entsprechende Feld der Datendatei enthält eine leere Zeichenfolge. Wenn INSERT ... SELECT * FROM OPENROWSET(BULK...) die Felder dieser Datendatei in die MyTestDefaultCol2-Tabelle importiert, wird statt des Standardwertes standardmäßig NULL in Col2 eingefügt. Dieses Standardverhalten führt zu folgendem Ergebnis:
|
|
|
|
|
|
Um den Standardwert Default value of Col2
anstelle von NULL
einzufügen, müssen Sie den Tabellenhinweis KEEPDEFAULTS verwenden, wie im folgenden Beispiel gezeigt. Führen Sie von einem Abfragetool, wie z. B. dem SQL Server Management Studio-Abfrage-Editor, folgende Anweisung aus:
USE AdventureWorks;
GO
INSERT INTO MyTestDefaultCol2
WITH (KEEPDEFAULTS)
SELECT *
FROM OPENROWSET(BULK 'C:\MyTestEmptyField2-c.Dat',
FORMATFILE='C:\MyTestDefaultCol2-f-c.Fmt'
) as t1 ;
GO
Siehe auch
Konzepte
Beibehalten von NULL-Werten oder Verwenden von Standardwerten während des Massenimports
Erstellen und Ändern von DEFAULT-Definitionen
Andere Ressourcen
BACKUP (Transact-SQL)
OPENROWSET (Transact-SQL)
bcp (Dienstprogramm)
BULK INSERT (Transact-SQL)
Tabellenhinweis (Transact-SQL)