Имя свойства BIML для «прямого ввода» / SqlCommand задачи поиска - PullRequest
1 голос
/ 09 января 2020
                    <Dataflow Name="Load Tables">
                        <Expressions>
                            <Expression PropertyName="[Lookup].[SqlCommand]">"SELECT * FROM " + @[$User::DBSchema] + ".Table1" </Expression>
                        </Expressions>

[...]

Применительно к:

                            <Lookup Name="Lookup1" CacheMode="Partial" NoMatchBehavior="RedirectRowsToNoMatchOutput" OleDbConnectionName="abc123">

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

"Не удалось разрешить ссылку на '[Lookup1]. [SqlCommand]' в свойстве 'Свойство'. '' недопустимо. Укажите допустимое имя области."

В. dtsx, необходимое свойство называется "[Lookup1]. [SqlCommand]" (и с тем же выражением); при изменении в файле .dtsx вручную работает, как и ожидалось, но я не знаю, как перевести это в biml, в частности, какое ссылочное имя использовать, чтобы он знал, куда поместить выражение.

Мой вопрос заключается в том, какое имя свойства ссылается на DirectInput / SqlCommand задачи Lookup? Я не могу понять это.

Вот изображение того, как это выглядит в dtsx, когда я изменяю его вручную:

Picture of dtsx

Примечание:

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

                            <Lookup Name="Lookup1" CacheMode="Partial" NoMatchBehavior="RedirectRowsToNoMatchOutput">
                                <DirectInput>
                                SELECT * [etc.]
                                </DirectInput>

Ответы [ 2 ]

1 голос
/ 10 января 2020

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

        <Dataflow Name="Data Flow Task">
          <Expressions>
            <Expression ExternalProperty="[Lookup].[SqlCommand]">"SELECT *
FROM
(
    VALUES (1, 'b')
,(100, 'a')
,(11, 'c')
) D(colRef, colVal)"</Expression>
          </Expressions>
          <Transformations>
            <OleDbSource Name="OLE DB Source" ConnectionName="SourceConnectionOLEDB">
              <DirectInput>SELECT 100 aS col
union all select 11</DirectInput>
            </OleDbSource>
            <Lookup Name="Lookup" OleDbConnectionName="SourceConnectionOLEDB">
              <Outputs>
                <Column SourceColumn="colVal" TargetColumn="colVal" />
              </Outputs>
              <Parameters>
                <Parameter SourceColumn="col" />
              </Parameters>
              <Inputs>
                <Column SourceColumn="col" TargetColumn="colRef" />
              </Inputs>
              <DirectInput>SELECT *
FROM
(
    VALUES (1, 'b')
,(100, 'a')
) D(colRef, colVal)</DirectInput>
              <ParameterizedQuery>select * from (SELECT *
FROM
(
    VALUES (1, 'b')
,(100, 'a')
) D(colRef, colVal)) [refTable]
where [refTable].[colRef] = ?</ParameterizedQuery>
            </Lookup>
            <RowCount Name="Row Count" VariableName="User.Variable" />
          </Transformations>
        </Dataflow>

В приведенном выше фрагменте я генерирую пару чисел , 100 и 11 как col и затем направляют к компоненту Lookup, который имеет жестко закодированные значения 1 и 100. Поскольку я ожидаю совпадения, если я запустил его как есть, он взорвется от непревзойденного значения 11.

Переопределение ExternalProperty моего Dataflow затем вводит «пропущенные» во время выполнения, чтобы спасти мой поиск от взрыва.

В вашем случае,

Я не пытался сделать это для частичного кэша, но я не могу себе представить, что синтаксис будет сильно отличаться, , но Я бы однажды исправил код вручную, а затем перепроектировал бы пакет. Biml Express теперь предоставляет эту функциональность бесплатно, и это здорово, что вы ответили на вопрос "как мне express Y в Biml?" Щелкните правой кнопкой мыши на пакете, и появится опция «Преобразовать в Biml» (имя приблизительное)

0 голосов
/ 10 января 2020

Billink c ответ правильный. По сути, это было:

ExternalProperty = [etc], а не «PropertyName», и для того, чтобы оно работало, требуется сгенерированный действительный запрос.

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