1

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

在此处输入图像描述

出于某种原因,一些数据会抛出误报并将行标记为已更改,而实际上它们没有。我已将其隔离为单个字符串列(邮政编码)。

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

在此处输入图像描述

如果我从一个空表开始,并运行包两次,第二次大约 20% 的行出现变化,即使它们没有。以下 sql 将现有行连接到临时表中的“更新”行并比较它们的 zip:

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
4

2 回答 2

1

您的源数据是 varchar(9),而您的查找数据是 char(9)。我相信,但尚未测试,这会导致您的数据中出现|65401||65401 |(那里有 4 个空格和仅用于划定的管道)。

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

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

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

于 2013-10-01T20:17:33.943 回答
0

在我看来,问题在于您的数据有两个邮政编码。

于 2013-10-01T19:55:44.970 回答