Когда я использую GetDropAndCreateDdl для генерации сценариев CREATE для таблиц, я получаю типы данных для столбцов, отличных от того, какими являются фактические типы данных.BIML GetDropAndCreateDdl, создавая неправильные длины для типов данных
Это приводит к ошибке проверки пакета, что «выход ошибки имеет свойства, которые не соответствуют свойствам соответствующего столбца источника данных» и статус проверки «VS_NEEDSNEWMETADATA».
Если я щелкнул правой кнопкой мыши источник подключения, выберите «Показать расширенный редактор» и взгляните на сопоставления столбцов, я вижу, что [Column1] в списке доступных внешних столбцов имеет разную длину, чем тип данных, который был сгенерирован в GetDropAndCreateDdl. Я могу удалить и пересоздать сопоставления метаданных, но это не является жизнеспособным решением, поскольку есть много задач потока данных.
Как получить GetDropAndCreateDdl для создания правильных типов данных с правильной длиной?
Я использую ImportDB, чтобы получить список таблиц, метаданных и т.д.
Environment.biml
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Connections>
<OdbcConnection Name="OdbcSrc_DV" ConnectionString="Dsn=Source-32bit-test;" />
<OleDbConnection Name="OleDbDst_Staging" ConnectionString="Provider=SQLNCLI11;Server=SQL-DEV;Initial Catalog=Source_Staging;Integrated Security=SSPI;" />
</Connections>
<Databases>
<Database Name="Source" ConnectionName="OdbcSrc_DV" />
<Database Name="Source_Staging" ConnectionName="OleDbDst_Staging" />
</Databases>
<Schemas>
<Schema Name="dbo" DatabaseName="Source" />
<Schema Name="dbo" DatabaseName="Source_Staging" />
</Schemas>
</Biml>
CreateTableMetadata.biml
<#@ import namespace="System.Data" #>
<#@ import namespace="Varigence.Biml.CoreLowerer.SchemaManagement" #>
<#
var sourceConnection = RootNode.DbConnections["OdbcSrc_DV"];
var importResult = sourceConnection.ImportDB("", "", ImportOptions.ExcludeForeignKey | ImportOptions.ExcludeColumnDefault | ImportOptions.ExcludeViews);
var tableNamesToImport = new List<string>() { "Test_Table" };
#>
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Tables>
<# foreach (var table in importResult.TableNodes.Where(item => tableNamesToImport.Contains(item.Name)).OrderBy(item => item.Name)) { #>
<Table Name="<#=table.Name#>" SchemaName="Source.dbo">
<Columns>
<#=table.Columns.GetBiml()#>
</Columns>
<Annotations>
<Annotation AnnotationType="Tag" Tag="SourceSchemaQualifiedName"><#=table.SchemaQualifiedName#></Annotation>
</Annotations>
</Table>
<# } #>
</Tables>
</Biml>
DeployTargetTables. biml
<#@ template tier="2" #>
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Packages>
<Package Name="MasterTableDeploy" ConstraintMode="Parallel">
<Tasks>
<# foreach (var table in RootNode.Tables) { #>
<ExecuteSQL Name="SQL CREATE <#=table.Name#>" ConnectionName="OleDbDst_Staging">
<DirectInput><#=table.GetDropAndCreateDdl()#></DirectInput>
</ExecuteSQL>
<# } #>
</Tasks>
</Package>
</Packages>
</Biml>
CreateLoadPackages.biml
<#@ template tier="2" #>
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Packages>
<Package Name="Copy Data" ConstraintMode="Parallel">
<Tasks>
<# foreach (var table in RootNode.Tables) { #>
<ExecuteSQL Name="SQL TRUNCATE <#=table.Name#>" ConnectionName="OleDbDst_Staging">
<DirectInput>TRUNCATE TABLE <#=table.Name#></DirectInput>
</ExecuteSQL>
<Dataflow Name="DFT LOAD <#=table.Schema.Name#>_<#=table.Name#>">
<PrecedenceConstraints>
<Inputs>
<Input OutputPathName="SQL TRUNCATE <#=table.Name#>.Output" />
</Inputs>
</PrecedenceConstraints>
<Transformations>
<OdbcSource Name="ODBC_SRC <#=table.Name#>" Connection="OdbcSrc_DV">
<DirectInput>SELECT <#=table.GetColumnList()#> FROM <#=table.GetTag("SourceSchemaQualifiedName")#></DirectInput>
</OdbcSource>
<OleDbDestination Name="ODBC_DST <#=table.Name#>" ConnectionName="OleDbDst_Staging">
<TableOutput TableName="<#=table.ScopedName#>" />
</OleDbDestination>
</Transformations>
</Dataflow>
<# } #>
</Tasks>
</Package>
</Packages>
</Biml>
Вот скрипт, который будет создаваться из источника ODBC -
А вот результаты INFORMATION_SCHEMA.COLUMNS для та же самая таблица -
Вы заметили какие-либо конкретные типы данных, которые приводят к неправильному типов и длины в BIML? Получили минимальное воспроизведение для нас? Какую версию SQL Server (я полагаю) вы подключаете? – billinkc
Я только заметил, что типы nvarchar меняются. В приведенном выше примере я ожидаю, что [Столбец 1] будет nvarchar (30), но используя GetDropAndCreateDdl, он переходит как nvarchar (45). Обновлен мой вопрос, чтобы включить сценарии BIML. – Tom
Я [не вижу] (http://i.stack.imgur.com/3BqjN.png) с моей [простейшей версией скрипта] (https://gist.github.com/billinkc/7b42479ba9669e944fb194e2285dcae8) , Мне нужно запустить, но я попытаюсь взглянуть на то, что вы конкретно делаете позже. – billinkc