Где-то у вас есть конечные пробелы, либо в вашем источнике, либо в вашем поиске.
Рассмотрим следующий исходный запрос.
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 и пустой строки.
![введите здесь описание изображения](https://i.stack.imgur.com/GgpRN.png)
Вы можете видеть, что для 5 исходных строк T, R и Empty String совпали и перешли к пути Match Output. Там, где я использовал NULL или явно использовал пробелы, не совпало.
Если я изменю режим поиска с полного кэша на частичный, NULL по-прежнему не будет совпадать, в то время как явные пробелы соответствуют.
Что?
В режиме полного кэша преобразование «Уточняющий запрос» выполняет исходный запрос и сохраняет данные локально на компьютере, на котором выполняются службы SSIS. Этот поиск будет точным соответствием с использованием правил равенства .NET. В этом случае ''
не будет соответствовать ' '
.
Однако, когда мы изменим наш режим кэширования на None или Partial, мы больше не будем полагаться на правила сопоставления .NET и вместо этого будем использовать правила сопоставления исходной базы данных. В TSQL ''
будет соответствовать ' '
Чтобы ваш режим полного кэша работал должным образом, вам нужно будет применить RTRIM
к преобразованию «Источник» и/или «Уточняющий запрос». Если вы убеждены, что RTRIM не работает с вашим исходным кодом, добавьте преобразование производного столбца, а затем примените туда свой RTRIM, но я считаю, что лучше злоупотреблять базой данных, а не SSIS.
Бимл
Biml, язык разметки бизнес-аналитики, описывает платформу для бизнес-аналитики. Помощник по BIDS — это бесплатное дополнение для 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>
person
billinkc
schedule
03.11.2014