phi*_*con 2 sql-server ssis biml
我使用以下BIML脚本基于源数据库创建每个表的列列表.我还添加了列dwh_timestamp.我使用此脚本创建目标表,添加元数据列.
<Columns>
<# foreach (var column in table.Columns) { #>
<#=column.GetBiml()#>
<# } #>
<Column Name="dwh_timestamp" DataType="DateTime" IsNullable="true"/>
</Columns>
Run Code Online (Sandbox Code Playgroud)
我使用以下代码创建将从源导入数据的SSIS包.
<DirectInput>SELECT <#=table.GetColumnList()#> FROM <#=table.GetTag("SourceSchemaQualifiedName")#></DirectInput>
Run Code Online (Sandbox Code Playgroud)
但是,由于源表不包含dwh_timestamp列,因此会导致错误.
我如何过滤table.GetColumnList()所以它跳过带有"dwh_"前缀的列?
小智 5
有几种方法可以过滤Biml中的列列表.
您可以筛选列名称或列名称的一部分:
<#=table.GetColumnList(c => c.Name != "dwh_timestamp")#>
<#=table.GetColumnList(c => c.Name.StartsWith("dwh_"))#>
Run Code Online (Sandbox Code Playgroud)
更可重用的解决方案是在列上创建注释并过滤注释:
<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")#>
Run Code Online (Sandbox Code Playgroud)
当然,您可以选择自己的注释策略.您可能希望使用"true"和"false"而不是"Yes"和"No",或者反转注释逻辑以指定哪些列是源列而不是DWH列.
| 归档时间: |
|
| 查看次数: |
1367 次 |
| 最近记录: |