Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssis 比较列有时会产生误报_Ssis - Fatal编程技术网

Ssis 比较列有时会产生误报

Ssis 比较列有时会产生误报,ssis,Ssis,我正在处理一个SSIS包,添加更新功能(使用暂存表更新行)。为此,我使用查找和条件拆分,在其中比较所有列 出于某种原因,一些数据抛出误报,并将行标记为已更改,而这些行尚未更改。我已将其分离为单个字符串列(邮政编码) 该列直接来自查找。源数据列是varchar(9),目标(即第二个值的源)是char(9)。在SSI中,两列都作为DT_STR,91252 如果我从一个空表开始,运行包两次,第二次大约有20%的行显示为已更改,即使它们没有更改。以下sql将现有行连接到临时表中的“更新”行,并比较它

我正在处理一个SSIS包,添加更新功能(使用暂存表更新行)。为此,我使用查找和条件拆分,在其中比较所有列

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

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

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

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

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

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

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

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


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

源数据是varchar(9),查找数据是char(9)。我相信,但尚未测试,这会导致数据中出现
| 65401 |
| 65401 |
(此处有4个空格,仅用于描述管道)

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

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


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

我正在比较新的邮政编码和旧的邮政编码,但它没有改变(例如,如果我运行两次,大约20%的行被“更新”,每次都是相同的行),这是因为地址在那里有两次,有两个不同的邮政编码。我正在比较新的邮政编码和旧的邮政编码,但它没有改变(例如,如果我运行两次,大约20%的行被“更新”,每次都是相同的行)这是因为地址在那里有两次,有两个不同的邮政编码。我的初步猜测是您的char/varchar差异和默认的ansi_填充设置。如果您对源代码和查找zip都应用了RTRIM,问题是否仍然存在?@billinkc成功了,添加一个答案,我会接受。那么,在引擎盖下到底发生了什么?我假设当SSI拉入varchar列时,它被填充到DT_STR的任何长度。我猜不是这样的?我假设
abc
abc
(3个空格)如果目标数据类型是长度为6的DT_STR,情况也会一样-现在看来,非填充的数据类型实际上不会是长度6?我最初的猜测是,您的char/varchar差异和默认的ansi_填充设置。如果您对源和查找ZIP都应用了RTRIM,问题是否仍然存在?@billinkc是这样做的,请添加一个回答,我会接受。那么引擎盖下到底发生了什么?我假设当SSIS拉入varchar列时,它被填充到DT_STR的任何长度。我猜不是这样的?我假设
abc
abc
(3个空格)如果目标数据类型是长度为6的DT_STR,那么情况也会一样——现在看来,非填充的数据类型实际上不会是长度6?