Vous pouvez juste exclude the column comme Cathrine montre si vous avez déjà matérialisé les tables dans la collection Tables. L'avantage de cette approche est que le schéma complet de votre table source est disponible au cas où quelqu'un aurait besoin des colonnes exclues. L'inconvénient est que tout le monde qui n'en a pas besoin doit répéter sa logique d'exclusion.
L'autre route serait de le gérer lorsque vous importez vos données mais avant d'en faire une collection de tables. Même tour de Cathrine, juste à un endroit différent
En supposant que vous ayez deux fichiers. La première est Environment.biml qui ressemble à
<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>
Le second est 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>
vous pouvez maintenant inspecter les nœuds de table ne sont pas une référence à ModifiedDate. Comme cela dépend de tableImporter.biml, nous devons spécifier qu'il est dans un niveau supérieur à Environment.biml (qui est le niveau 0 car il est biml statique) et tableImporter.biml (qui est le niveau 1 car il a script biml et non niveau explicite défini)
<#@ 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>
Merci pour vos suggestions. Après quelques essais et erreurs, j'ai réussi à obtenir le résultat que j'avais après avoir utilisé la méthode RemoveFromParent. Le fichier biml suivant supprimera le SpatialLocation de la table Address: <# @ template language = "C#" niveau = "4" #> <# chaîne [,] table = { {"Address", "SpatialLocation"} }; pour (int i = 0; i –
Xanthos