Frage

Ich möchte eine eine Spalte Textdatei in einen meiner SQL-Tabellen importieren. Die Datei ist nur eine Liste von Schimpfwörtern.

Ich habe die folgenden TSQL geschrieben, dies zu tun

BULK INSERT SwearWords
FROM 'c:\swears.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)

Doch es Fehler mit unexapected Ende der Datei. Die Tabelle im zu importieren ist nur ein Identitätsfeld von einem nvarchar Feld gefolgt, dass ich den Text einfügen mag. Es funktioniert gut, wenn ich in der Textdatei „1“ an den Anfang der eveyr Zeile hinzufügen, gehe ich davon aus das ist, weil SQL, wenn für zwei Felder suchen. Gibt es eine Möglichkeit, um dieses?

Danke

War es hilfreich?

Lösung

Sie müssen FORMATFILE für diesen Einsatz. Siehe Bulk .

  

FORMATFILE [= 'format_file_path']

     

Gibt den vollständigen Pfad ein Format   Datei. Ein Format-Datei beschreibt die Daten   Datei, die gespeicherten Antworten enthält   erstellt das Dienstprogramm Bcp auf die Verwendung von   gleiche Tabelle oder Sicht. Die Formatdatei   sollte in Fällen, in denen verwendet werden:

* The data file contains greater or fewer columns than the table or view.

* The columns are in a different order.

* The column delimiters vary.

* There are other changes in the data format. Format files are usually created by using the bcp utility and modified with a text editor as needed. For more information, see bcp Utility.

Weitere Informationen finden Sie unter Verwenden von Format-Dateien .

Andere Tipps

Dies ist in Büchern auf der Linie für Bulk unter dem KEEPIDENTITY Argumente beschrieben. Hier ist, was ist, sagt

  

KEEPIDENTITY   Gibt an, dass die Werte für eine Identitätsspalte in der importierten Datei vorhanden sind. Wenn KEEPIDENTITY nicht gegeben ist, werden die Identitätswerte für diese Spalte in der Datendatei importiert ignoriert und SQL Server ordnet automatisch eindeutige Werte basierend auf den Samen und Schrittwerte während der Tabellenerstellung angegeben. Wenn die Datendatei keine Werte für den Identitätsspalt in der Tabelle oder Sicht enthält, verwenden Sie eine Formatdatei angeben, dass die Identitätsspalte in der Tabelle oder Sicht sollten übersprungen werden beim Importieren von Daten; SQL Server ordnet automatisch eindeutige Werte für die Spalte

Also, entweder eine Formatdatei verwenden oder einen Dummy-Wert liefern und stellen Sie sicher, nicht das KEEPIDENTITY Argument zu verwenden,

Sie können aber auch einen Blick auf Ihren Tisch schaffen nur auf der nvarchar Spalte basiert, und dann Bulk in Ihre Ansicht. Dies ist eine sehr saubere Art und Weise von Bulk verwenden.

Auf diese Weise brauchen Sie nicht über Ihre Identity-Spalte zu kümmern, oder eine Formatdatei zu erstellen.

Ihre Anweisung von Bulk sollte wie folgt aussehen:

BULK INSERT vw_SwearWords FROM 'c:\swearwords.txt' WITH (ROWTERMINATOR = '\n')

Sie müssen sicherstellen, dass die Struktur der Textdatei und der Tisch Spiel machen - wenn die Tabelle zwei Felder hat, dann werden Sie auch zwei Felder / Spalten in der Textdatei zur Verfügung stellen müssen, um

.

Da die erste Spalte in der SQL-Tabelle ein Identity-Feld ist, können Sie einen beliebigen Wert bieten Sie wollen -. Aber Sie haben dort einen Wert haben, ich glaube nicht, dass es eine Möglichkeit, um diese

Marc

Überprüfen Sie die letzte Zeile hat CR / LF (\ r \ n). Manchmal, das ist das Problem, einige andere mal ein extra Wagenrücklauf ist am Ende der Datei. Sie können, dass der Check mit einem Hexeditor.

Sie könnten die Identitätsspalte entfernen und legen Sie sie zurück, wenn Sie fertig sind. Alternativ kann, wenn die Datenbank Beziehungen bricht, können Sie den Import tun mit DTS oder SSIS, wenn es sich um eine einmal ist Import aus - mehr granulare Kontrolle von mit Säulen Hantieren

In SQL Server 2008 Ich habe festgestellt, es einfacher erstellen Sie einfach eine Datei viele Einsätze wie so enthält, und fügen Sie, dass in Management Studio des Abfragefenster, anstatt zu kämpfen mit der Format-Datei bekommen und Bulk-Dateiberechtigungen genau richtig :

USE YourDB
GO
INSERT INTO MyTable (FirstCol, SecondCol)
VALUES ('First',1),
('Second',2),
('Third',3),
('Fourth',4),
('Fifth',5)

http://blog.sqlauthority.com/2008/07/02/sql-server-2008-insert-multiple-records-using-one-insert-statement-use-of-row -constructor /

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top