SqlBulkInsert - Comment définir des Déclencheurs, les Contraintes de Vérification?
Je suis de l'exécution d'une instruction bulk insert avec un ADO.NET 2.0 SqlBulkCopy objet à partir d'une méthode C# dans une base de données MS SQL 2005, à l'aide d'une base de données de l'utilisateur avec des autorisations limitées. Lorsque j'essaie d'exécuter l'opération, j'ai le message d'erreur:
De copie en bloc a échoué. L'utilisateur n'a pas
L'autorisation ALTER TABLE sur la table
'theTable'. MODIFIER
TABLE autorisation est requise sur le
table cible d'une opération de copie en bloc
si la table a des déclencheurs ou vérifier
contraintes, mais'FIRE_TRIGGERS'
ou
'CHECK_CONSTRAINTS'
en bloc les allusions ne sont pas
précisé que les options de la copie en bloc
commande.
J'ai lu de la documentation et des créé le de copie en bloc de l'objet avec le constructeur qui me permet de préciser les choses:
SqlBulkCopy bc = new SqlBulkCopy(
System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"],
SqlBulkCopyOptions.FireTriggers & SqlBulkCopyOptions.CheckConstraints);
Mais cela ne changera rien - j'obtiens le même message d'erreur qu'avant. J'ai essayé de jongler avec certains des autres SqlBulkCopyOptions valeurs mais pas de chance. Je pensais vraiment que ce serait résoudre le problème, suis-je raté quelque chose?
J'ai testé la procédure après l'octroi de l'ALTER sur la table de mon utilisateur, et le succès de l'opération. Cependant, ce n'est pas une option pour ma situation.
OriginalL'auteur James Orr | 2008-12-16
Vous devez vous connecter pour publier un commentaire.
Résolu! Semble que j'ai besoin d'un rappel sur les drapeaux des enums. J'étais au niveau du bit ANDing les valeurs enum quand j'aurais dû ORing.
évalue à zéro (ce qui est équivalent à SqlBulkCopyOptions.Par défaut.)
A fonctionné correctement et a permis l'insertion en bloc pour terminer.
Je ne connaissais pas ces options existé, mais de façon créative à la recherche m'a amené ici. Résolu mon problème avec SqlBulkCopy dans une table avec des déclencheurs sans avoir à donner de ma connexion SQL ALTER TABLE des autorisations!
OriginalL'auteur James Orr
Possibilités que, je suis désolé
Documentation SQL pour BULK INSERT spécifie les 3 cas où l'instruction ALTER TABLE est nécessaire. Vous répertorié 2 d'entre eux. Est le KeepIdentity option, même si n'est pas nécessaire?
Une autre option est que le déclencheur sur la table est déjà désactivé, confondant la question. Utilisation
ALTER TABLE dbo.SomeTable ENABLE TRIGGER ALL
pour assurer activé.OriginalL'auteur gbn