Insérer une chaîne vide sur SQL Server avec INSERTION en bloc
Exemple table contient les champs Id
(l'Identité de la table, un entier); Name
(un simple attribut qui autorise les valeurs null, c'est une chaîne)
J'essaie un fichier CSV qui contient ceci:
1,
1,""
1,"
Aucun d'entre eux me donne une chaîne vide comme le résultat de la masse de l'insertion. Je suis à l'aide de SQL Server 2012.
Que puis-je faire?
- De bien vouloir partager votre code
Vous devez vous connecter pour publier un commentaire.
Autant que je sache, bulk insert ne peut pas insérer une chaîne vide, il peut soit conserver la valeur null ou utiliser la valeur par défaut avec l'option keepnulls ou sans option keepnulls. Pour votre 3 des exemples d'enregistrements, après l'insertion de la base de données, il devrait ressembler à:
La raison en est, le bulk insert permettra de traiter votre première ligne, deuxième colonne valeur nulle; pour les 2 autres rangs, prendre la deuxième colonne valeur n'est pas null, et le prendre comme il est.
Au lieu de laisser Bulk Insert pour insérer la valeur d'une chaîne vide pour vous, vous pouvez vous permettre de colonne de table ayant valeur par défaut comme une chaîne vide.
Exemple de la manière suivante:
Le résultat sera comme suit: (La première ligne du fichier CSV obtiendrez une chaîne vide)
S'il vous plaît garder à l'esprit que la valeur par DÉFAUT spécifié ne s'insérés si vous n'êtes pas en utilisant l'option KEEPNULLS.
En utilisant le même exemple que ci-dessus, si vous ajoutez l'option
KEEPNULLS
à laBULK INSERT
, c'est à dire:sera le résultat dans la colonne par défaut la valeur est ignorée et les valeurs Null être inséré bof les cordes à vide, j'.e:
vais maintenant vous donner:
Il ne semble pas être une bonne raison d'ajouter
KEEPNULLS
dans votre exemple, mais je suis tombé sur un problème similaire tout à l'heure, oùKEEPNULLS
a été nécessaire dans leBULK INSERT
.Ma solution a été de définir de rendre la colonne
[name]
dans la mise en scène de la tableBulkInsertTest
NOT NULL
mais rappelez-vous que la colonne par DÉFAUT la valeur est ignorée et une chaîne vide est insérée à la place.Voir plus ici : Garder les valeurs Null ou UseDefault les Valeurs Lors de l'Importation en bloc (SQL Server)