Lier la valeur par défaut si la valeur de la colonne feuille Excel est NULL dans le téléchargement en bloc de copies en bloc SQL

asp.net asp.net-mvc-4 c# sqlbulkcopy sql-server

Question

J'ai créé l'application MVC 4 qui peut télécharger des données dans une base de données à l'aide de la méthode de téléchargement en masse SQL.

Une fois que je sélectionne un fichier Excel, il peut télécharger des données dans le système.

cela fonctionne bien, maintenant je veux ajouter une valeur par défaut si le champ Excel est null

voici comment il extrait les valeurs de colonne d'Excel

     "s1.Gender, " +
     "s1.Country_of_Birth, " +
     "s1.Date_of_Birth, " +

Je veux ajouter une valeur par défaut à partir du niveau de code, je gère déjà cela en utilisant le niveau de base de données.

par exemple pour ajouter la valeur par défaut pour "date de naissance", j'ai ajouté la contrainte suivante

ALTER TABLE [dbo].[tbl_HEI_student] ADD  CONSTRAINT [DF_tbl_HEI_student_Date_of_Birth]  DEFAULT (getdate()) FOR [Date_of_Birth]

Mais lorsque je télécharge un fichier excel dans une base de données, la méthode de téléchargement de copie en bloc SQL ignore l'ajout de cette base de données de valeurs par défaut.

Comment puis-je ajouter une valeur par défaut à partir de la méthode du contrôleur

Réponse populaire

Votre problème doit être que la colonne autorise NULLS.

Dans le cas où votre colonne permet NULL et vous fournir une valeur NULL sur l'insert NULL est insérée. Si aucune valeur n'est fournie pour la colonne, DEFAULT sera pris en compte.

Configurez votre colonne sur NOT NULL.

ALTER TABLE [dbo].[tbl_HEI_student] ALTER COLUMN [Date_of_Birth] DATE NOT NULL

Voici la définition par défaut .

MODIFIER:

Comme vous l'avez remarqué, BulkInsert ne peut pas insérer le NULLS dans ces colonnes et faire prévaloir la valeur DEFAULT du côté serveurSQL, et le NOT NULL que j'ai suggéré imposera qu'aucune valeur n'est fournie ou autre que NULL.

Je peux voir quelques options.

  • Soit vous en occupez le côté .NET en définissant la valeur par défaut (vous devrez vous montrer du code .NET si vous souhaitez obtenir de l’aide).
  • en effectuant une opération en bloc pour les lignes avec valeur et une autre pour les lignes sans et en supprimant le mappage pour cette colonne, la contrainte par défaut prend les mesures
  • Définissez la ligne pour autoriser NULLS, effectuez le volume comme vous le faisiez, puis effectuez une mise à jour après le volume pour définir NULLS sur votre valeur par défaut.

Je sais que BULK INSERT et BCP ont tous les deux un qualificatif comme indiqué ici pour traiter les valeurs NULL. La même option est disponible dans les options .NET SqlBulkCopy .

Voici une autre question liée à votre problème.

N'oubliez pas que votre schéma de base de données doit vous aider à appliquer vos règles métier et à garder vos données propres. Si la date ne doit jamais être NULL, conservez la colonne sous la forme NOT NULL et résolvez votre solution en conséquence.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi