Azure Data Factory复制活动报错:无法插入NULL到RowID列,求定位操作源
ADF Copy Activity 插入NULL到RowID列的排查方案
1. 先锁定报错的目标表归属
报错信息里明确指出了报错表:MyDB.dbo.MyData,直接查询这个表所属的数据库(Stage/Master),就能确定是哪个Copy分支的操作出问题,不用盲目排查两个分支。
2. 检查对应Copy Activity的Sink配置
- 映射规则:打开报错分支的Copy Activity,进入
Mapping选项卡,查看RowID列的映射状态:- 如果RowID列被映射了,但源XML没有对应字段,ADF会默认传入NULL,直接导致报错;
- 如果RowID列没出现在映射列表里,ADF会尝试向目标表的该列插入NULL(因为目标表存在这个列但未被映射赋值)。
- Sink高级设置:如果目标表的RowID是自增IDENTITY列,需确认是否在Sink的
Advanced选项中开启了Enable identity insert,并指定了RowID列名;若未开启,ADF会试图插入NULL触发报错。 - 预复制脚本:检查Sink配置中的
Pre-copy script,确认脚本里有没有手动向RowID列插入NULL的逻辑(比如清空表后插入测试数据的语句)。
3. 验证目标表RowID的约束规则
确认MyDB.dbo.MyData的RowID列是否为自增列:
- 若为自增列:确保目标表的IDENTITY属性正常启用,且Copy Activity的映射中不要包含RowID列(让数据库自动生成值);
- 若需手动赋值:在Copy Activity的映射里,给RowID列添加生成表达式,比如用
@guid()生成唯一标识,或者通过Lookup活动获取序列值赋值。
4. 拆分分支单独测试
将指向Stage和Master库的两个Copy Activity分开单独运行,观察哪个分支触发515错误,直接定位问题分支。
5. 查看ADF运行日志的细节
在ADF管道监控页面,点开报错的Copy Activity,查看:
Input部分:明确显示Sink对应的数据集信息,确认目标库;Output部分:查看ADF生成的INSERT执行语句,确认是否包含RowID列且值为NULL,进一步验证映射问题。
内容的提问来源于stack exchange,提问作者TankTop
相关产品推荐
相关产品推荐

