从RootNode中删除Biml中的列

时间:2016-09-28 09:13:50

标签: ssis biml

在我们的Biml文件中,我们使用<script type="text/javascript"> function hide() { $("#pb").hide("slow", function () { alert("The paragraph gone!"); }); } </script> 方法在rootnode中构建数据模型。 SSIS包基于模型中的表和列。

我们希望能够在编译包之前从GetDataSchema()中删除列。请告诉我这是怎么做到的?是否可以使用RootNode方法。如果是这样。怎么样?谢谢。

1 个答案:

答案 0 :(得分:0)

如果您已经将表格实现到Tables集合中,那么您可以{Cathine演示exclude the column。此方法的优点是,如果有人确实需要排除列,则可以使用源表的完整模式。当然,缺点是每个不需要的人都必须重复你的排斥逻辑。

另一种方法是在导入数据时但在将其作为Tables集合之前处理它。来自Cathrine的同样技巧,只是在不同的地方

假设您有两个文件。第一个是看起来像

的Environment.biml
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
    <Connections>
        <Connection Name="CMAdventureWorks2014" ConnectionString="Provider=SQLNCLI11;Data Source=localhost\dev2014;Integrated Security=SSPI;Initial Catalog=AdventureWorks2014" />
    </Connections>
    <Databases>
        <Database Name="AdventureWorks2014" ConnectionName="CMAdventureWorks2014" />
    </Databases>
</Biml>

第二个是tableImporter.biml

<Biml xmlns="http://schemas.varigence.com/biml.xsd">
    <#
    var connection = RootNode.Connections["CMAdventureWorks2014"];
    List<string> schemaList = new List<string>{"Person"};
    var results = connection.GetDatabaseSchema(schemaList, null, ImportOptions.None);

    #>
    <Tables>
        <!-- Always exclude ModifiedDate from our column emission -->
        <# foreach (var table in results.TableNodes){ #>
        <Table Name="<#=table.Name#>" SchemaName="<#= table.Schema #>">
            <Columns>
                <#  
                // Use whatever logic to build exclusion list
                var excludeList = table.Columns.Where(s => s.Name == "ModifiedDate");
                var output = table.Columns.Except(excludeList);
                #>
                <#= output.GetBiml() #>
            </Columns>
        </Table>
        <# } #>
        <#= results.TableNodes.GetBiml() #>
    </Tables>
    <Schemas>
        <#= results.SchemaNodes.GetBiml() #> 
    </Schemas>
</Biml>

现在您可以检查表节点没有对ModifiedDate的引用。由于这将取决于tableImporter.biml,我们需要指定它位于比Environment.biml更高的层(它是层0,因为它是静态biml)和tableImporter.biml(层1是因为它有biml脚本而且没有显式层定义)

<#@ template tier="10" #>
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
    <Annotations>
    <# foreach (var table in RootNode.Tables) {#>
        <Annotation AnnotationType="Documentation" Tag="<#= table.ScopedName #>"><#= table.GetDropAndCreateDdl() #></Annotation>
    <# } #>
    </Annotations>
</Biml>