So importieren Sie Leerzeichen als Nullen anstelle von Nullen, während Sie txt mit dem Assistenten importieren

8

Ich verwende den Import-Assistenten, um eine Textdatei zu laden, und benötige Leerzeichen in Ganzzahlfeldern, um Nullen zu sein, aber nur Nullen werden eingefügt.

Wie importiere ich es richtig?

Vladimir
quelle

Antworten:

8

Leider ist dies nicht möglich, wenn Sie darauf bestehen, den Assistenten zu verwenden. Sie müssten das Paket mit Visual Studio bearbeiten.

Beim Bearbeiten des Pakets in Visual Studio gibt es die Option "Nullen behalten"

Angesichts dieser CSV-Datei:

StringField,IntField
a,1
b,5
c,
d,6
e,
f,8
g,
h,
i,10
j,

und diese Tabellendefinition

CREATE TABLE [dbo].[NullTest](
    [StringField] [varchar](50) NULL,
    [IntField] [int] NULL
) ON [PRIMARY]

GO

Wenn Sie die Daten mit dem Assistenten importieren, werden die Nullen in Nullen konvertiert

Wenn Sie jedoch am Ende des Assistenten "Paket speichern unter" anstelle von "Sofort ausführen" wie in diesem Bildschirm auswählen

Geben Sie hier die Bildbeschreibung ein

Die Datei kann irgendwo im Dateisystem gespeichert werden.

Wenn Sie dann ein neues Integration Services-Projekt erstellen, können Sie ein vorhandenes Paket wie dieses hinzufügen

Geben Sie hier die Bildbeschreibung ein

Wenn Sie zu der gerade gespeicherten Datei navigieren und sie anzeigen, wird eine Datenflussaufgabe angezeigt (Sie sehen auch eine SQL-Ausführungsaufgabe, wenn Sie die Tabelle erstellen möchten, anstatt sie an eine vorhandene anzuhängen).

Geben Sie hier die Bildbeschreibung ein

Doppelklicken Sie auf den Datenfluss, um ihn zu bearbeiten, und doppelklicken Sie auf die Datenquelle, um die Option "Nullen beibehalten" zu aktivieren

Geben Sie hier die Bildbeschreibung ein

Doppelklicken Sie dann auf das Ziel, um die Eigenschaften anzuzeigen, und ändern Sie die Eigenschaft "Keep nulls" in true.

Geben Sie hier die Bildbeschreibung ein

Wenn Sie dann auf den grünen Pfeil in der Symbolleiste klicken oder Debug> Debugging starten aus dem Menü auswählen, um Ihr Paket auszuführen, ist dies das Endergebnis

Geben Sie hier die Bildbeschreibung ein

Am Ende ist der Assistent nur ein Assistent. Es generiert ein SSIS-Paket für Sie und wählt einige Standardeinstellungen aus, leider nicht die gewünschten Standardeinstellungen.
Wenn Sie Nullen beibehalten möchten, gibt es keine andere Möglichkeit, als das Paket mit Visual Studio zu bearbeiten.

Andererseits ist es möglicherweise einfacher, das Paket einfach selbst in Visual Studio zu erstellen oder die T-SQL-Lösung von @ MaxVernon zu verwenden.

Tom V - versuchen Sie topanswers.xyz
quelle
6

Ich sehe, dass Sie versuchen, den Assistenten zum Importieren von Daten zu verwenden. Möglicherweise ist es besser, die Tabelle manuell mit den gewünschten Spaltendefinitionen zu erstellen und BULK INSERTdie Daten mit dem Befehl T-SQL zu importieren.

 USE tempdb;

 CREATE TABLE dbo.TestSource
 (
   SomeNumber INT NULL
 );

Ich habe eine Nur-Text-Beispieldatei mit dem Namen erstellt, C:\temp\test.txtdie die folgenden Zeilen enthält:

 1

 3
 4

 6
 7

 9

Diese Anweisung importiert die Zeilen aus der Textdatei in die TestSourceTabelle:

 BULK INSERT dbo.TestSource
    FROM 'C:\temp\test.txt'
    WITH (
       DATAFILETYPE = 'char',
       FIELDTERMINATOR = ',',
       KEEPNULLS
    );

Dies zeigt den Inhalt nach Abschluss des Imports:

 SELECT *
 FROM dbo.TestSource;

Geben Sie hier die Bildbeschreibung ein

Max Vernon
quelle
6

Wenn Sie mindestens SSMS v 17.3 haben und in eine neu erstellte Tabelle importieren, können Sie hierfür den Assistenten zum Importieren von Flatfiles in SQL verwenden .

Ausführen gegen die CSV-Datei in Toms Antwort.

Geben Sie hier die Bildbeschreibung ein

Die resultierende Tabelle sieht aus wie

Geben Sie hier die Bildbeschreibung ein

Martin Smith
quelle