sql server 2005 - remotas - SqlBulkInsert-Cómo configurar disparos de fuego, comprobar restricciones?
error al instalar sql server 2014 en windows 10 (2)
Estoy realizando una inserción masiva con un objeto SqlBulkCopy de ADO.NET 2.0 desde un método C # en una base de datos MS SQL 2005, utilizando un usuario de base de datos con permisos limitados. Cuando intento ejecutar la operación, aparece el mensaje de error:
La copia masiva falló. El usuario no tiene el permiso ALTER TABLE en la tabla ''theTable''. Se requiere permiso ALTER TABLE en la tabla de destino de una operación de copia masiva si la tabla tiene desencadenantes o restricciones de comprobación, pero
''FIRE_TRIGGERS''
o''CHECK_CONSTRAINTS''
no se especifican como opciones para el comando de copia masiva.
Leí documentación y creé el objeto de copia masiva con el constructor que me permite especificar tales cosas:
SqlBulkCopy bc = new SqlBulkCopy(
System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"],
SqlBulkCopyOptions.FireTriggers & SqlBulkCopyOptions.CheckConstraints);
Pero esto no cambia nada, recibo el mismo mensaje de error que antes. Intenté jugar con algunos de los otros valores de SqlBulkCopyOptions pero no tuve suerte. Realmente pensé que esto solucionaría el problema, ¿me estoy perdiendo algo?
Probé el procedimiento después de otorgar ALTER en la mesa a mi usuario, y la operación tuvo éxito. Sin embargo, esta no es una opción para mi situación.
¡Resuelto! Parece que necesito un repaso en las enumeraciones de banderas. Yo estaba en el modo de bit ANDing los valores enum cuando debería haber estado ORing them.
SqlBulkCopyOptions.FireTriggers & SqlBulkCopyOptions.CheckConstraints
evalúa a cero (que es equivalente a SqlBulkCopyOptions.Default)
SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.CheckConstraints
Funcionó correctamente y permitió completar la inserción masiva.
Posibilidades solamente, lo siento
La documentación SQL para BULK INSERT especifica 3 casos donde se necesita ALTER TABLE. Usted enumeró 2 de ellos. ¿Se está configurando la opción KeepIdentity, incluso si no es necesaria?
Otra opción es que el desencadenante de la tabla ya esté desactivado, lo que confunde el problema. Utilice ALTER TABLE dbo.SomeTable ENABLE TRIGGER ALL
para asegurarse de que ALTER TABLE dbo.SomeTable ENABLE TRIGGER ALL
habilitado.