在我們的Biml文件中,我們使用GetDataSchema()
方法在rootnode
中構建了一個數據模型。 SSIS包基於模型中的表格和列。從RootNode刪除Biml的列
我們希望能夠在編譯包之前從RootNode
中刪除一列。請讓我知道如何做到這一點?可以使用RemoveRootNode(0
方法。如果是這樣。怎麼樣?謝謝。
在我們的Biml文件中,我們使用GetDataSchema()
方法在rootnode
中構建了一個數據模型。 SSIS包基於模型中的表格和列。從RootNode刪除Biml的列
我們希望能夠在編譯包之前從RootNode
中刪除一列。請讓我知道如何做到這一點?可以使用RemoveRootNode(0
方法。如果是這樣。怎麼樣?謝謝。
如果您已經將表格物化到Tables集合中,您可以像Cathrine一樣演示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>
感謝您的建議。經過一些試驗和錯誤,我設法得到我使用RemoveFromParent方法後的結果。以下biml文件將從地址表中刪除SpatialLocation:<#@ template language =「C#」tier =「4」#> <# string [,] table = {「Address」,「SpatialLocation」} };對於(int i = 0; i –
Xanthos