查找任务的 "Direct Input"/SqlCommand 的 BIML PropertyName

BIML PropertyName for "Direct Input"/SqlCommand of Lookup Task

                    <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">

这是一个更大的包的一部分,但是当我尝试生成它时,它给了我一个错误:

"Could not resolve reference to '[Lookup1].[SqlCommand]' in property 'Property'. '' is invalid. Provide valid scoped name."

在.dtsx中,需要的属性被称为“[Lookup1].[SqlCommand]”(并给出相同的表达式);当在 .dtsx 文件中手动更改时,按预期工作,但我不知道如何将其转换为 biml,特别是要使用什么引用名称,以便它知道将表达式放在哪里。

我的问题是引用查找任务的 DirectInput/SqlCommand 的 属性 名称是什么?我似乎无法弄清楚。

这是我手动更改它时它在 dtsx 中的样子的图片:

注:

我无法将表达式直接放入查找任务中,因为参数是动态传递到表达式中的,例如

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

认为 您缺少的是当您在数据流中定义查找时,针对默认架构提供有效查询。这将允许引擎派生引用的属性 table/set,然后一旦包被发出,数据流覆盖应该接管。

        <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,然后路由到具有硬编码值 1 和 100 的 Lookup 组件。因为我希望匹配,如果我运行 照原样,它会在不匹配的 11 值上爆炸。

我的数据流的 ExternalProperty 覆盖然后在 运行 时注入 "missing" 以防止我的查找被破坏。

在你的情况下,

我没有尝试为部分缓存执行此操作,但我无法想象语法会有很大不同,但是我会手动修复代码时间,然后对包进行逆向工程。 BimlExpress 现在免费提供该功能,它非常适合回答 "how do I express Y in Biml?" 右键单击​​包,然后有一个 Convert to Biml 选项(名称近似)

Billinkc 的回答是正确的。本质上是:

ExternalProperty=[etc],而不是 "PropertyName",为了使其正常工作,需要生成有效的查询。