Warum funktioniert bcp Ausgabe null, wenn die Spalte eine leere Zeichenfolge enthält und leere Zeichenfolge, wenn die Spalte null ist?

StackOverflow https://stackoverflow.com/questions/1644731

  •  10-07-2019
  •  | 
  •  

Frage

Das kam mir wirklich seltsames Verhalten und ich habe für Fehler in meinem Code eine Weile überprüft, bevor ich diese gefunden

"aus Kopien der Datenbanktabelle oder Ansicht in eine Datei. Wenn Sie eine vorhandene Datei angeben, wird die Datei überschrieben wird. Wenn die Daten zu extrahieren, beachten Sie, dass das Dienstprogramm BCP eine leere Zeichenfolge als null und eine Null-Zeichenfolge als ein repräsentiert leerer String." (Von http://msdn.microsoft.com/en-us/library/ms162802 aspx )

Natürlich erlaubte das ich mein Problem zu beheben, aber kann jemand denken oder weiß jemand einen Grund, warum dies der Fall ist?

War es hilfreich?

Lösung

Es ist schon eine Weile her, aber ich bin sicher, dass es eine Abwärtskompatibilität / Legacy zurück zu SQL Server 6.5

SQL Server 6.5 kann nicht leeren String speichern: Es gab immer einen Platz. Dies änderte sich mit SQL 7

So '' -> NULL und ' ' -> '' aus einer alten Geschichte Perspektive korrekt ist.

Andere Tipps

SELECT ARTICULO as Articulo, 
        case when rtrim(CCOLOR) = '' then null else rtrim(CCOLOR) end as Color, 
        case when rtrim(TALLE) = '' then null else rtrim(TALLE) end as Talle,
from precios

Senden null anstelle von leer.

Ich finde die beste Lösung hier:

https: // Bytes .com / Thema / sQL-Server / Antworten / 143738-bcp-Einfügen-blank-Raum-empty-string

  

Ich fand um eine Arbeit, eine Case-Struktur in der SQL-Abfrage zu   ändern leere Zeichenfolge auf einen Null. Die BCP wiederum gibt das sich ergeb   null als leer!   Danke für deine Hilfe.   Eric

Dies ist auf den „Standardwerte“ Abschnitt für BCP bezogen werden:

https://docs.microsoft.com/en-us/sql/relational-databases/import-export/keep-nulls-or-use-default-values-during-bulk -import-sQL-Server

  

Zum Beispiel, wenn es ein Nullfeld in einer Datendatei ist, wird der Standardwert für die Spalte geladen statt.

Sie müssen Tage denken zurück, wo reine Textdateien von anderen seltsamen Systemen importieren. BCP übersetzt '' als „nicht definiert“ (= fehlende Daten) und setzt ein NULL in der Datenbank (= Daten fehlen). Der andere Weg, um ein NULL von Datenbank muss ein '' für die anderen Systeme sein.

Um die ‚echten‘ Daten aus der Datenbank verwenden, um die -k Schalter zu erhalten:

https://docs.microsoft.com/en-us/sql/relational-databases/import-export/keep-nulls-or-use-default-values-during -bulk-Import-sQL-Server # keep_nulls

  

Die folgenden Qualifier festlegen, dass ein leeres Feld in der Datendatei während des Massenimportvorganges seinen Nullwert behält, anstatt einen Standardwert (falls vorhanden) für die Tabellenspalten zu erben.

Dann haben Sie Ihre ASCII 0x0 in Ihrer Datei / Datenbank.

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