我使用以下BIML脚本根据源数据库创建每个表的列列表。我还添加了列dwh_timestamp。我使用此脚本创建目标表,添加元数据列。
<Columns>
<# foreach (var column in table.Columns) { #>
<#=column.GetBiml()#>
<# } #>
<Column Name="dwh_timestamp" DataType="DateTime" IsNullable="true"/>
</Columns>
我使用以下代码创建将从源导入数据的SSIS包。
<DirectInput>SELECT <#=table.GetColumnList()#> FROM <#=table.GetTag("SourceSchemaQualifiedName")#></DirectInput>
但是这会导致错误,因为源表不包含dwh_timestamp列。
我如何过滤table.GetColumnList(),以便跳过带有&#34; dwh _&#34;的列。前缀?
答案 0 :(得分:5)
有几种方法可以过滤Biml中的列列表。
您可以过滤列名称或列名称的一部分:
<#=table.GetColumnList(c => c.Name != "dwh_timestamp")#>
<#=table.GetColumnList(c => c.Name.StartsWith("dwh_"))#>
更可重用的解决方案是在列上创建注释并过滤注释:
<Columns>
<# foreach (var column in table.Columns) { #>
<#=column.GetBiml()#>
<# } #>
<Column Name="dwh_timestamp" DataType="DateTime" IsNullable="true">
<Annotations>
<Annotation AnnotationType="Tag" Tag="IsDWHColumn">Yes</Annotation>
</Annotations>
</Column>
</Columns>
<#=table.GetColumnList(c => c.GetTag("IsDWHColumn") != "Yes")#>
当然,您选择自己的注释策略。您可能想要使用&#34; true&#34;和&#34;假&#34;而不是&#34;是&#34;和&#34;否&#34;或反转注释逻辑以指定哪些列是源列而不是DWH列。