J'effectue une insertion en bloc avec un objet SqlBulkCopy ADO.NET 2.0 à partir d'une méthode C# dans une base de données MS SQL 2005, en utilisant un utilisateur de base de données avec des autorisations limitées. Lorsque j'essaie d'exécuter l'opération, le message d'erreur s'affiche:SqlBulkInsert - Comment définir les déclencheurs d'incendie, vérifier les contraintes?
La copie en bloc a échoué. L'utilisateur n'a pas l'autorisation ALTER TABLE sur la table 'theTable'. ALTER autorisation TABLE est nécessaire sur la 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'
conseils en vrac ne sont pas spécifié comme options à la copie en bloc commande .
J'ai lu la documentation et créé l'essentiel objet de copie 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 change rien - je reçois le même message d'erreur comme avant. J'ai essayé de jouer avec certaines des autres valeurs de SqlBulkCopyOptions mais pas de chance. Je pensais vraiment que cela réglerait le problème, ai-je oublié quelque chose?
J'ai testé la procédure après avoir accordé ALTER sur la table à mon utilisateur, et l'opération a réussi. Cependant, ce n'est pas une option pour ma situation.
Juste appel. Oops! – gbn
Je ne savais pas que ces options existaient mais quelques recherches créatives m'ont amené ici. Résolu mon problème avec SqlBulkCopy dans une table avec des triggers * sans * avoir à donner mes permissions SQL ALTER TABLE! – madannes