wake-up-neo.net

Lesen einer Textdatei mit SQL Server

Ich versuche, eine Textdatei aus einer SQL-Abfrage (SQL Server 2005) einzulesen, habe aber kein Glück. Ich habe verschiedene Sachen mit EXEC und xp_cmdshell ausprobiert, aber alle funktionieren nicht. Dies ist die allgemeine Art und Weise, wie ich versucht habe, dies zu erreichen:

CREATE TABLE temp (data varchar(2000));
INSERT temp EXEC master.dbo.xp_cmdshell 'type file.txt';

Ich versuche dann, Daten aus der Temp-Tabelle auszuwählen. Ich habe viel herumgesucht und kann nicht sagen, was ich falsch mache. Hilfe?

28
Markus O'Reilly

Wie sieht Ihre Textdatei aus? Jede Zeile ein Datensatz?

Sie müssen die Anweisung BULK INSERT überprüfen - diese sollte etwa wie folgt aussehen:

BULK INSERT dbo.YourTableName
FROM 'D:\directory\YourFileName.csv'
WITH
(
  CODEPAGE = '1252',
  FIELDTERMINATOR = ';',
  CHECK_CONSTRAINTS
) 

In meinem Fall importiere ich hier eine CSV-Datei - aber Sie sollten auch eine Textdatei importieren können.

Aus den MSDN-Dokumenten - hier ein Beispiel, das hoffentlich für eine Textdatei mit einem Feld pro Zeile funktioniert:

BULK INSERT dbo.temp 
   FROM 'c:\temp\file.txt'
   WITH 
      (
         ROWTERMINATOR ='\n'
      )

Scheint in meiner Testumgebung gut zu funktionieren :-)

38
marc_s

Ich habe gerade das entdeckt:

SELECT * FROM OPENROWSET(BULK N'<PATH_TO_FILE>', SINGLE_CLOB) AS Contents

Der Inhalt der Datei wird als varchar (max) eingezogen. Ersetzen Sie SINGLE_CLOB durch:

SINGLE_NCLOB für nvarchar (max) SINGLE_BLOB für varbinary (max)

Danke an http://www.mssqltips.com/sqlservertip/1643/ using-openrowset-to-read-large-files-into-sql-server/ dafür!

37
Cain

wenn Sie die Datei auf einmal in eine Tabelle einlesen möchten, sollten Sie BULK INSERT verwenden. Wenn Sie dagegen vorziehen, die Datei Zeile für Zeile zu analysieren, um Ihre eigenen Prüfungen durchzuführen, sollten Sie folgende Web-Site besuchen: https://www.simple-talk.com/sql/t-sql-programming/Lese- und Schreibdateien in-sql-server-using-t-sql/ Möglicherweise müssen Sie Ihre xp_cmdshell- oder andere Automatisierungsfunktionen OLE aktivieren. Einfaches Google wird es und das Skript erscheint . Hoffe, nützlich zu sein.

0
Rodrigo

Müssen Sie dies einmal oder als Teil eines normalen Datenbankvorgangs tun (dh als Reaktion auf einen Trigger, ein geplantes Ereignis usw.)?

In jedem Fall ist es besser, ein SSIS-Paket zu erstellen. 

  1. Klicken Sie in SQL Management Studio mit der rechten Maustaste auf die Datenbank. 
  2. Wählen Sie Aufgaben | Daten importieren ...
  3. Folgen Sie den Anweisungen des Assistenten. Wählen Sie "Flat Text File" als Anbieter, wenn Sie dazu aufgefordert werden. 

Ich habe dbo.xp_cmdshell (für Ihr Beispiel) nicht verwendet, aber ich kann mir vorstellen, dass das Erfassen der Ausgabe das Problem ist. 

0
3Dave