比较列偶尔会引发误报

时间:2013-10-01 19:52:49

标签: ssis

我正在开发一个SSIS包,添加更新功能(使用登台表更新行)。为此,我使用查找和条件拆分,我比较所有列。

enter image description here

出于某种原因,某些数据会抛出误报并将行标记为已更改,但尚未更改。我已将其分离为单个字符串列(邮政编码)。

该列直接来自查找。源数据列为varchar(9),目标(即第二个值的来源)为char(9)。在SSIS中,两列都以DT_STR,9,1252

的形式出现

enter image description here

如果我从空表开始,并运行包两次,第二次大约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

2 个答案:

答案 0 :(得分:1)

您的源数据是varchar(9),您的查找数据是char(9)。我相信,但尚未经过测试,这会在您的数据中产生|65401||65401 |(此处有4个空格,仅用于描绘管道)。

来源系统的数据在加载时会受ANSI_PADDING设置的影响。默认情况下,SSIS不会填充字符串。

因此,在查找中,您需要将源数据填充为9个字符或修剪查找键。

与此无关,但您可能希望将邮政编码与zip + 4数据分开存储。当您通过地址验证服务运行数据时,后者更有可能比前者更改。

答案 1 :(得分:0)

在我看来问题就是你的数据有两个邮政编码。