在某个地方,您在源代码或查找中都有尾随空格。
考虑以下源查询。
SELECT
D.SourceColumn
, D.Description
FROM
(
VALUES
(CAST('T' AS varchar(4)), 'T')
, (CAST('R' AS varchar(4)), 'R')
, (CAST('' AS varchar(4)), 'Empty string')
, (CAST(' ' AS varchar(4)), 'Blanks')
, (NULL, 'NULL')
) D (SourceColumn, Description);
对于我的查找,我将上述查询限制为 T、R 和空字符串行。

您可以看到,对于 5 个源行,T、R 和空字符串匹配并转到匹配输出路径。在我使用 NULL 或显式使用空格的地方,没有进行匹配。
如果我将查找模式从 Full Cache 更改为 Partial,则 NULL 继续不匹配,而显式空格匹配。
呜?
在完全缓存模式下,查找转换执行源查询并将数据本地保存在执行 SSIS 的计算机上。此查找将使用 .NET 相等规则进行精确匹配。在那种情况下,''
将不匹配' '
。
但是,当我们将缓存模式更改为 None 或 Partial 时,我们将不再依赖 .NET 匹配规则,而是使用源数据库的匹配规则。在 TSQL 中,''
将匹配' '
要使您的完整缓存模式按预期工作,您需要RTRIM
在源和/或查找转换中应用一个。如果您确信 RTRIM 无法使用您的源,请添加派生列转换,然后在此处应用您的 RTRIM,但我发现滥用数据库而不是 SSIS 更好。
比姆
Biml,商业智能标记语言,描述了商业智能平台。BIDS Helper是 Visual Studio/BIDS/SSDT 的免费插件,我们将使用它来将下面的 Biml 文件转换为 SSIS 包。
以下 biml 将生成
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Connections>
<OleDbConnection Name="CM_OLE" ConnectionString="Data Source=localhost\dev2012;Initial Catalog=tempdb;Provider=SQLNCLI11.0;Integrated Security=SSPI;" />
</Connections>
<Packages>
<Package ConstraintMode="Linear" Name="so_26719974">
<Tasks>
<Dataflow Name="DFT Demo">
<Transformations>
<OleDbSource
ConnectionName="CM_OLE"
Name="OLESRC Source">
<DirectInput>
SELECT
D.SourceColumn
, D.Description
FROM
(
VALUES
(CAST('T' AS varchar(4)), 'T')
, (CAST('R' AS varchar(4)), 'R')
, (CAST('' AS varchar(4)), 'Empty string')
, (CAST(' ' AS varchar(4)), 'Blanks')
, (NULL, 'NULL')
) D (SourceColumn, Description);
</DirectInput>
</OleDbSource>
<Lookup
Name="LKP POC"
OleDbConnectionName="CM_OLE"
NoMatchBehavior="RedirectRowsToNoMatchOutput"
>
<DirectInput>
SELECT
D.SourceColumn
FROM
(
VALUES
(CAST('T' AS varchar(4)))
, (CAST('R' AS varchar(4)))
, (CAST('' AS varchar(4)))
) D (SourceColumn);
</DirectInput>
<Inputs>
<Column SourceColumn="SourceColumn" TargetColumn="SourceColumn"></Column>
</Inputs>
</Lookup>
<DerivedColumns Name="DER Default catcher" />
<DerivedColumns Name="DER NoMatch catcher">
<InputPath OutputPathName="LKP POC.NoMatch" />
</DerivedColumns>
</Transformations>
</Dataflow>
</Tasks>
</Package>
</Packages>
</Biml>