Pourquoi bcp génère-t-il la valeur null lorsque la colonne contient une chaîne vide et une chaîne vide lorsque la colonne est null?

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

  •  10-07-2019
  •  | 
  •  

Question

Cela m'a semblé être un comportement vraiment étrange et j'ai passé un bon moment à rechercher des bugs dans mon code avant de trouver ceci

" out des copies de la table ou de la vue de la base de données vers un fichier. Si vous spécifiez un fichier existant, le fichier est écrasé. Lors de l'extraction de données, notez que l'utilitaire bcp représente une chaîne vide en tant que null et une chaîne null en tant que chaîne vide. (à partir de http://msdn.microsoft.com/en-us/library/ms162802 .aspx )

Évidemment, cela m'a permis de régler mon problème, mais est-ce que quelqu'un peut penser ou est-ce que quelqu'un sait pourquoi cela est le cas?

Était-ce utile?

La solution

Cela fait quelque temps, mais je suis sûr que c'est une compatibilité ascendante / héritée de SQL Server 6.5

SQL Server 6.5 n'a pas pu stocker de chaîne vide: il y avait toujours un espace. Cela a changé avec SQL 7

Donc '' - > NULL et '' - > '' est correct du point de vue de l'histoire ancienne.

Autres conseils

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

Envoyez null à la place de vide.

Je trouve la meilleure solution ici:

https: // bytes .com / topic / sql-server / answers / 143738-bcp-insertion-espace-vide-chaîne

  

J'ai trouvé un moyen de contourner le problème en utilisant une structure Case dans la requête SQL pour   changez la chaîne vide en null. Le BCP génère à son tour le résultat   null comme vide!   Merci pour votre aide.   Eric

Ceci est lié aux " valeurs par défaut " section pour le BCP:

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

  

Par exemple, s'il existe un champ null dans un fichier de données, la valeur par défaut de la colonne est chargée à la place.

Vous devez penser aux jours où vous importez des fichiers texte en clair depuis d’autres systèmes étranges. BCP traduit '' par "non défini" (= données manquantes) et définit une valeur NULL dans la base de données (= données manquantes). L’inverse d’un NULL à partir de la base de données doit être un '' pour les autres systèmes.

Pour extraire les données "réelles" de la base de données, utilisez le commutateur -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

  

Les qualificateurs suivants spécifient qu'un champ vide du fichier de données conserve sa valeur null lors de l'opération d'importation en bloc, au lieu d'hériter d'une valeur par défaut (le cas échéant) pour les colonnes de la table.

Ensuite, vous avez votre code ASCII 0x0 dans votre fichier / base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top