Ssis BIML:无法将DerivedColumn输出绑定到ADO.Net目标(简单查询)
Biml在对程序包进行评级时会引发下一个异常:Ssis BIML:无法将DerivedColumn输出绑定到ADO.Net目标(简单查询),ssis,biml,Ssis,Biml,Biml在对程序包进行评级时会引发下一个异常: EmitSsis。内部编译器错误:工作流EmitSsis包含致命错误。阶段执行已停止。要获得帮助,请将Biml编译器错误消息发送到support@varigence.com.有关详细信息,请参阅其他错误。异常类型:NullReferenceException“我想这是由下一个原因引起的:我试图将DerivedColumn.Output绑定到ADO.Net目标,并且它的输出等于NULL。当我删除块“DerivedColumn”和目标输入绑定源输出时,
EmitSsis。内部编译器错误:工作流EmitSsis包含致命错误。阶段执行已停止。要获得帮助,请将Biml编译器错误消息发送到support@varigence.com.有关详细信息,请参阅其他错误。异常类型:NullReferenceException“
我想这是由下一个原因引起的:我试图将DerivedColumn.Output绑定到ADO.Net目标,并且它的输出等于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> 这里有一个SQL查询选择 修剪(等边LanceStr)=“1”
目标组件没有输出路径,只有错误。无法将派生列连接到任何目标组件的SSIS设计器中的输出路径。这就是Biml失败的原因——你尝试做的事情没有模拟 我在代码中看到的另一个问题是,您正在为输入路径引用一个无效的源
<AdoNetDestination Name="CompletionCertificate Destination" ConnectionName="Database (ADO.Net)">
<InputPath OutputPathName="CompletionCertificate.Output"/>
此外,由于Biml是一种按约定类型的语言,默认情况下是按照声明的顺序连接事物。这意味着在提供的(源->派生列->目标)中,您不需要指定任何路径,因为没有要处理的分支。我找到了一段代码,在其中键入了miscorrect。首先,我发布了带有以下错误的源代码,告诉@billinkc: <AdoNetDestination Name="CompletionCertificate Destination"> <ConnectionName="Database (ADO.Net)"> <InputPath OutputPathName="CompletionCertificate.Output"/>
将从DerivedColumn输出中查找的属性
名称
(IsOpeningBalanceStr)与输入值具有相同的名称。这是不对的。我弄错了它的意思(认为这是输入列的名称,而不是输出)因此,您应该定义一个属性
Name
值,该值不同于输入列Name
。或者您应该使用其他列参数键入ReplaceExisting=“true”。就像这样:
TRIM(IsOpeningBalanceStr)=“1”
您是试图将派生列从目标添加到“常规”输出路径,还是错误的“常规”输出路径。有
,没有Derived1。ErrorOutput
。是的,那么我不定义目标的任何输出路径。只有目标的输入路径
。我找到了它这样做的原因。看看我的答案,@billinkc。
<AdoNetDestination Name="CompletionCertificate Destination"> <ConnectionName="Database (ADO.Net)">
<InputPath OutputPathName="CompletionCertificate.Output"/>
<Column Name="IsOpeningBalanceStr" SsisDataTypeOverride="DT_BOOL" DataType="String" Length="150"> TRIM(IsOpeningBalanceStr) == "1"</Column>