SSIS导入数据时维度表主键写入事实表非空报错如何解决
SSIS 维度自动主键同步到事实表解决方案
核心可行方案:三次查找组件方案
你已新增salesid作为销售维度业务主键的设计完全符合规范,基于该设计的三次查找方案可以单数据流完成全量导入,完全避免事实表外键空值问题,无需开启字段允许空属性。
控制流执行顺序
先执行维度表加载任务,再执行事实表加载任务,确保查找前所有维度数据已写入数据库。
事实表数据流实现步骤
- 第一步:添加CSV源组件,读取全量原始CSV数据,确保携带所有维度的业务主键字段
- 第二步:添加第一个查找组件,关联第一个维度表,匹配条件为CSV中该维度业务主键 = 维度表业务主键,输出列选择该维度的自增代理主键,匹配模式选「完全匹配」,无匹配数据可重定向到错误输出单独排查
- 第三步:添加第二个查找组件,关联第二个维度表,匹配规则同上,输出第二个维度的自增代理主键
- 第四步:添加第三个查找组件,关联销售维度表,匹配条件为CSV中的
salesid= 销售维度业务主键,输出saleskey代理主键 - 第五步:添加OLE DB目标组件,选择事实表作为写入目标,将三次查找输出的维度代理主键映射到事实表对应外键字段,其余业务字段正常映射即可
备选同任务主键获取方案
如果需要在同一个数据流中同时写入维度并获取生成的自增主键,可以在维度写入的OLE DB命令组件中使用OUTPUT语法返回主键值,无需拆分多任务:
INSERT INTO dim_sales (salesid, sales_name, sales_area) VALUES (?,?,?) OUTPUT INSERTED.saleskey
执行后生成的saleskey会直接返回到组件输出列,可直接接入后续事实表写入步骤。
注意事项
- 查找组件缓存模式优先选择「完全缓存」,维度数据量不大时性能最优,无需反复查询数据库
- 查找无匹配的异常数据单独输出到错误表人工核对,禁止直接写入主表规避空值问题
- 所有维度必须保留唯一业务主键,作为查找关联的唯一依据,不能仅依赖数据库生成的自增代理键
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

