SSIS增量数据加载错误

时间:2018-05-24 05:08:11

标签: sql sql-server ssis sql-server-2012

我正在尝试从登台表(cust_reg_dim_stg)到仓库表(dim_cust_reg)执行增量插入。这是我正在使用的查询。

 insert into dim_cust_reg WITH(TABLOCK)
(
    channel_id
    ,cust_reg_id
    ,cust_id
    ,status
    ,date_created
    ,date_activated
    ,date_archived
    ,custodian_id
    ,reg_type_id
    ,reg_flags
    ,acc_name
    ,acc_number
    ,sr_id
    ,sr_type
    ,as_of_date
    ,ins_timestamp
    )
select channel_id
    ,cust_reg_id
    ,cust_id
    ,status
    ,date_created
    ,date_activated
    ,date_archived
    ,reg_type_id
    ,reg_flags
    ,acc_name
    ,acc_number
    ,sr_id
    ,sr_type
    ,as_of_date
    ,getdate() ins_timestamp

from umpdwstg..cust_reg_dim_stg stg with(nolock)
join lookup_channel ch with(nolock) on stg.channel_name = ch.channel_name

where not exists
(select * from dim_cust_reg dest
    where dest.cust_reg_id=stg.cust_reg_id 
    and dest.sr_id=stg.sr_id
    and dest.channel_id=ch.channel_id )

此处,临时表中没有channel_id,而是使用频道查找表(lookup_channel)。运行此查询时,我收到以下错误。

 Violation of PRIMARY KEY constraint 'PK__dim_cust__4A293521A789A5FA'. 
 Cannot insert duplicate key in object 'dbo.dim_cust_reg'.

查询有什么问题? channel_id,sr_id和cust_reg_id形成唯一的密钥组合。似乎没有数据错误。

2 个答案:

答案 0 :(得分:1)

您需要在两个方面进行故障排除: -

在下面的代码中:

join lookup_channel ch with(nolock) on stg.channel_name = ch.channel_name 

与目标维度中的记录相比,登台表中的传入channel_name可能具有不同的通道名称。

OR 可能是因为NOT EXISTS条件中的这个连接条件:

and dest.sr_id=stg.sr_id
    and dest.channel_id=ch.channel_id

此处,当您将暂存数据与目标数据进行比较时,传入的channel_id可能会有所不同。因此,建议一次忽略频道ID并尝试进行故障排除。一旦将这些数据加载到目标中,您就可以确切地知道错误是否是因为channel_id。

快乐排除故障!

答案 1 :(得分:0)

如果表中已存在重复的条目--custr_regr_dim_stg - 则SELECT查询将生成这两个记录,并尝试将其插入到dim_cust_reg表中。所以在SELECT语句中使用DISTINCT。