gpt4 book ai didi

sql-server - 在 BIML SSIS 脚本中跳过列

转载 作者:行者123 更新时间:2023-12-02 09:33:44 24 4
gpt4 key购买 nike

我使用以下 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() 以便它跳过带有“dwh_”前缀的列?

最佳答案

有多种方法可以在 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")#>

当然,您可以选择自己的注释策略。您可能需要使用“true”和“false”而不是“Yes”和“No”,或者反转注释逻辑以指定哪些列是源列而不是 DWH 列。

关于sql-server - 在 BIML SSIS 脚本中跳过列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29848731/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com