1、问题描述:批量插入的时候遇到过 测试环境插入成功,但是到了生产环境,直接提示 没有 “Bulk copy failed. User does not have ALTER TABLE permission on table 'NewOrderPlan'. ALTER TABLE permission is required on the target table of a bulk copy operation if the table has triggers or check constraints, but 'FIRE_TRIGGERS' or 'CHECK_CONSTRAINTS' bulk hints are not specified as options to the bulk copy command.”;这句话的意思是,当你执行Bulk copy时关闭触发器,发现没有关闭的权限导致的,但是生产环境不给予这个权限;
2、解决方法:既然无法关闭触发器,那么我们就在代码里面 编写“SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(sqlConn, SqlBulkCopyOptions.FireTriggers, null);” 将触发器加上去,代表Bulk copy动作时,依旧执行触发器,同时相应的去更改触发器的判断条件适用于自己的逻辑代码;
public void BatchBulkCopyExecute<T>(DataTable dt)
{
var strDBConnString = _configuration.GetConnectionString("SAM_DI_Entities_" + strDBEnvironment);
SqlConnection sqlConn = new SqlConnection(strDBConnString);
using (sqlConn)
{
if (sqlConn.State != ConnectionState.Open)
{
sqlConn.Open();
}
SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(sqlConn, SqlBulkCopyOptions.FireTriggers, null);
sqlbulkcopy.DestinationTableName = typeof(T).Name;//数据库中的表名
for (int i = 0; i < dt.Columns.Count; i++)
{
sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);
}
sqlbulkcopy.WriteToServer(dt);
}
sqlConn.Close();
sqlConn.Dispose();
}