BulkCopy与触发器(Triggers)之间的问题

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();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值