查找任务的 "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",为了使其正常工作,需要生成有效的查询。
<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",为了使其正常工作,需要生成有效的查询。