我正在开发一个SSIS包,添加更新功能(使用登台表更新行)。为此,我使用查找和条件拆分,我比较所有列。
出于某种原因,某些数据会抛出误报并将行标记为已更改,但尚未更改。我已将其分离为单个字符串列(邮政编码)。
该列直接来自查找。源数据列为varchar(9)
,目标(即第二个值的来源)为char(9)
。在SSIS中,两列都以DT_STR,9,1252
如果我从空表开始,并运行包两次,第二次大约20%的行出现了变化,即使它们没有。以下sql将现有行连接到登台表中的“已更新”行并比较它们的拉链:
SELECT a.key_DestinationZip, b.key_DestinationZip,
CASE WHEN a.key_DestinationZip = b.key_DestinationZip then 1 else 0 end
FROM [dbo].[sta_Sales] as a
join [dbo].[fact_Sales] as b
on a.key_FullSalesNumber = b.key_FullSalesNumber
结果与
类似78735 78735 1
38138 38138 1
答案 0 :(得分:1)
您的源数据是varchar(9),您的查找数据是char(9)。我相信,但尚未经过测试,这会在您的数据中产生|65401|
和|65401 |
(此处有4个空格,仅用于描绘管道)。
来源系统的数据在加载时会受ANSI_PADDING
设置的影响。默认情况下,SSIS不会填充字符串。
因此,在查找中,您需要将源数据填充为9个字符或修剪查找键。
与此无关,但您可能希望将邮政编码与zip + 4数据分开存储。当您通过地址验证服务运行数据时,后者更有可能比前者更改。
答案 1 :(得分:0)
在我看来问题就是你的数据有两个邮政编码。