BIML: невозможно связать вывод DerivedColumn с пунктом назначения ADO.Net (простой вопрос) - PullRequest
0 голосов
/ 20 мая 2018

Biml выдал мне следующее исключение при создании пакета:
"EmitSsis. Внутренняя ошибка компилятора: рабочий процесс EmitSsis содержит фатальные ошибки. Выполнение фазы остановлено. Для получения помощи, пожалуйста, отправьте сообщения об ошибках компилятора Biml на support@varigence.comСм. Другие ошибки для получения дополнительной информации. Тип исключения: NullReferenceException "
Я полагаю, это вызвано следующей причиной: я пытаюсь связать DerivedColumn.Output с ADO.Net Destination, и его вывод равен NULL.Полагаю, что тогда, когда я удаляю блок «DerivedColumn» и на входе «Назначение» привязываю «Исходный вывод», все в порядке.
Как правильно связать вывод DerivedColumn с назначением?
Вот часть кода Biml


       <AdoNetSource Name="CompletionCertificate Source" ConnectionName="Connection1">
        <DirectInput> there an SQL query SELECT</DirectInput>
    </AdoNetSource>
    <DerivedColumns Name="Derived1">
        <InputPath OutputPathName="CompletionCertificate Source.Output"/>
        <Columns>
            <Column Name="IsOpeningBalanceStr" SsisDataTypeOverride="DT_BOOL" DataType="String" Length="150">TRIM(IsOpeningBalanceStr) == "1"< /Column>
        </Columns>
    </DerivedColumns>
    <AdoNetDestination Name="CompletionCertificate Destination" ConnectionName="Database (ADO.Net)">
        <InputPath OutputPathName="CompletionCertificate.Output"/>
        <ExternalTableOutput Table="Schema.Table"/>
        <Columns>
        <Column ...
        <Column ...
        <Column ...
        <Columns/>
     </AdoNetDestination >
                     </Transformations>
                 </Dataflow>
             </Tasks>
        </Package>
     </Packages>
 </Biml>

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Я нашел кусок кода, где я неправильно набираю.Во-первых, у меня есть исходный код с последующей ошибкой, как сказано @billinkc:

<AdoNetDestination Name="CompletionCertificate Destination"> <ConnectionName="Database (ADO.Net)">
        <InputPath OutputPathName="CompletionCertificate.Output"/>

Правильный путь - <InputPath OutputPathName="Derived1.Output"/>.
Но даже эта вещь не является ключевой идеей (с Derived1.Output она все равно падает).
Вторая и общая причина, по которой было сгенерировано исключение, заключается в том, что я не полностью классифицировал DerivedColumn.Где определено имя столбца:

<Column Name="IsOpeningBalanceStr" SsisDataTypeOverride="DT_BOOL" DataType="String" Length="150"> TRIM(IsOpeningBalanceStr) == "1"</Column>


Свойство Name ( IsOpeningBalanceStr ), которое будет следовать после вывода DerivedColumn, будет иметь то же имя, что и Inputзначение.Это не правильно.Я неправильно понял его значение (думал, что это имя столбца ввода, а не вывода).
Итак, вы должны определить значение свойства Name, отличное от столбца ввода Name.Или вы должны ввести ReplaceExisting = "true" с другими параметрами столбца.Вот так:

<Column Name="IsOpeningBalance" SsisDataTypeOverride="DT_BOOL" DataType="String" Length="150" ReplaceExisting="true">TRIM(IsOpeningBalanceStr) == "1"</Column>

0 голосов
/ 20 мая 2018

Компоненты назначения не имеют выходного пути, только ошибка.Невозможно подключить производный столбец к выходному пути в конструкторе служб SSIS для любого целевого компонента.Вот почему Biml терпит неудачу - нет аналога тому, что вы пытаетесь сделать.

Другая проблема, которую я вижу в вашем коде, заключается в том, что вы ссылаетесь на неверный источник для вашего пути ввода

<AdoNetDestination Name="CompletionCertificate Destination" ConnectionName="Database (ADO.Net)">
    <InputPath OutputPathName="CompletionCertificate.Output"/>

Этот фрагмент указывает, что мы должны найти компонент-предшественник с именем CompletionCertificate и присоединиться к выходному пути.У вас нет одного из них, у вас есть CompletionCertificate Source, который в настоящее время направляется в производный столбец с именем Derived1

Я думаю, что вы пытаетесь выразить, что пункт назначения должен быть присоединен кВыходной путь производного столбца

<AdoNetDestination Name="CompletionCertificate Destination" ConnectionName="Database (ADO.Net)">
    <InputPath OutputPathName="Derived1.Output"/>

Кроме того, поскольку Biml является языком типа «По соглашению», по умолчанию все элементы соединяются в порядке их объявления.Это означает, что в поставляемом (Источник -> Производный столбец -> Назначение) вам не нужно указывать какой-либо путь, так как нет ветвления, с которым нужно бороться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...