Perché l'output di bcp è nullo quando la colonna contiene una stringa vuota e una stringa vuota quando la colonna è nulla?

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

  •  10-07-2019
  •  | 
  •  

Domanda

Questo mi è sembrato un comportamento davvero strano e ho passato un po 'a controllare i bug nel mio codice prima di trovarlo

"quota copie dalla tabella del database o visualizza in un file. Se si specifica un file esistente, il file viene sovrascritto. Durante l'estrazione di dati, nota che l'utilità bcp rappresenta una stringa vuota come null e una stringa null come stringa vuota. & Quot; (da http://msdn.microsoft.com/en-us/library/ms162802 aspx )

Ovviamente questo mi ha permesso di risolvere il mio problema, ma qualcuno può pensare o qualcuno sa un motivo per cui questo è il caso?

È stato utile?

Soluzione

È passato del tempo, ma sono sicuro che sia una compatibilità / legacy all'indietro con SQL Server 6.5

SQL Server 6.5 non è riuscito a memorizzare una stringa vuota: c'era sempre uno spazio. Questo è cambiato con SQL 7

Quindi '' - > NULL e '' - > '' è corretto dal punto di vista della storia antica.

Altri suggerimenti

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

Invia null al posto di vuoto.

Trovo la soluzione migliore qui:

https: // bytes .com / topic / sql-server / risposte / 143738-BCP-inserimento-vuoto-spazio-vuoto-stringa

  

Ho trovato una soluzione, usando una struttura Case nella query sql a   cambia la stringa vuota in nulla. Il BCP a sua volta genera il risultato   null come un vuoto!   Grazie per il vostro aiuto   Eric

Questo è correlato ai "valori predefiniti" sezione per BCP:

https://docs.microsoft.com/en-us/sql/relational-d database/import-export/keep-nulls-or-use-default-values-during-bulk -import-sql server

  

Ad esempio, se in un file di dati è presente un campo null, viene invece caricato il valore predefinito per la colonna.

Devi pensare a giorni in cui importare file di testo semplice da altri sistemi strani. BCP traduce '' come " non definito " (= dati mancanti) e imposta un NULL nel database (= dati mancanti). Il contrario di un NULL dal database deve essere un '' per gli altri sistemi.

Per estrarre i dati "reali" dal database utilizzare l'opzione -k :

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

  

I seguenti qualificatori specificano che un campo vuoto nel file di dati conserva il suo valore null durante l'operazione di importazione in blocco, anziché ereditare un valore predefinito (se presente) per le colonne della tabella.

Quindi hai il tuo ASCII 0x0 nel tuo file / database.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top