Cela m'a frappé comme un comportement vraiment étrange et j'ai passé un moment à vérifier des bugs dans mon code avant de trouver ceci p>
"Out copie de la table de base de données ou sur la vue dans 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 chaîne NULL et une chaîne null chaîne vide." (de http://msdn.microsoft.com/en-us/library/ms162802 .aspx ) p>
Évidemment, cela m'a permis de résoudre mon problème mais que quelqu'un peut-il penser ou que quelqu'un connaisse une raison pour laquelle c'est le cas? p>
3 Réponses :
Cela fait quelque temps, mais je suis sûr que c'est une compatibilité / héritage à l'envers Retour à SQL Server 6.5 P>
SQL Server 6.5 n'a pas pu stocker la chaîne vide: il y avait toujours un espace. Cela a changé avec SQL 7 P>
donc '' -> null code> et
'' -> '' code> est correct d'une perspective antique de l'historique. P>
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 Send null in place of empty.I find the best solution here:https://bytes.com/topic/sql-server/answers/143738-bcp-inserting-blank-space-empty-string I found a work around, using a Case structure in the sql query to change empty string to a null. The BCP in turn outputs the resulting null as an empty! Thanks for your assistance. Eric
Ceci est lié à la section "Valeurs par défaut" pour BCP: P>
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. P> blockQuote>
Vous devez repenser à des jours où importer des fichiers texte simples d'autres systèmes étranges. BCP traduit
'' code> comme "non défini" (= données manquantes) et définit une null dans la base de données (= données manquantes). L'inverse dans une nulle de la base de données doit être un
'' code> pour les autres systèmes. P>
Pour obtenir les données «réelles» de la base de données Utilisez le commutateur
-k code>: p>
Les qualificatifs suivants Spécifiez qu'un champ vide dans le fichier de données conserve sa valeur null pendant l'opération d'importation en vrac, plutôt que d'hériter une valeur par défaut (le cas échéant) pour les colonnes de table. P> blockQuote>
Ensuite, vous avez votre ASCII 0x0 dans votre fichier / base de données. P>
Stackoverflow.com/Questtions/12588149/... fournit une solution potentielle