我正在使用BIML和BIDSHelper来创建SSIS包 . 我试图将数据从csv导入到SQL Server . 我想在数据流发生之前在目标数据库中创建表 . 这是我的代码:
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Connections>
<OleDbConnection Name="CM_OLE"
ConnectionString="Data Source=(localdb)\projects;Initial Catalog=test;Integrated Security=SSPI;Provider=SQLNCLI11">
</OleDbConnection>
<FlatFileConnection
Name="FF Source"
FileFormat="FFF Source"
FilePath="F:\test.csv"
CreateInProject="false" />
</Connections>
<FileFormats>
<FlatFileFormat
Name="FFF Source"
CodePage="1252"
RowDelimiter="CRLF"
ColumnNamesInFirstDataRow="true"
IsUnicode="false"
FlatFileType="Delimited"
TextQualifer="_x0022_"
HeaderRowsToSkip="0">
<Columns>
<Column Name="Column1" Length="50" InputLength="50" MaximumWidth="50" DataType="AnsiString" ColumnType="Delimited" CodePage="1252" Delimiter="," TextQualified="true" />
<Column Name="Column2" Precision="10" Scale="2" DataType="Decimal" ColumnType="Delimited" CodePage="1252" Delimiter="CRLF" TextQualified="true" />
</Columns>
</FlatFileFormat>
</FileFormats>
<Packages>
<Package ConstraintMode="Linear" Name="NumericParsingFromFlatFileInsertIdentity">
<Tasks>
<ExecuteSQL Name="Create table sometablename" ConnectionName="CM_OLE">
<DirectInput>
CREATE TABLE sometablename(column1 varchar(50) NOT NULL, column2 varchar(10,2) NOT NULL);
GO
</DirectInput>
</ExecuteSQL>
<Dataflow Name="DFT Source">
<Transformations>
<FlatFileSource ConnectionName="FF Source" Name="FF Source" />
<OleDbDestination ConnectionName="CM_OLE" Name="OLEDB DST">
<ExternalTableOutput Table="sometablename"></ExternalTableOutput>
</OleDbDestination>
</Transformations>
</Dataflow>
</Tasks>
</Package>
</Packages>
当我尝试生成包时,它说 cannot execute query select * from sometablename invalid object name
. 我知道表 sometablename
不存在所以它会抛出错误 . 那么,我怎样才能自动创建表格呢?我读过BI Thoughts and Theories系列 . 第2部分显示了创建表的方法 . 我的理解是,最后它还创建了ExecuteSQl来创建表 . 我很困惑如何在数据流之前运行表创建脚本或者其他替代BIML提供什么?
提前致谢
3 回答
It seems what you're trying to do is not possible with BIML.
您可以做的是将
ValidateExternalMetadata="false"
添加到您的OLE DB目标 . 在开发环境中手动创建表,然后生成包 .它应该在任何其他环境中执行时没有问题,因为您将ValidateExternalMetadata设置为false .
对于其他试图实现此目的的人,Biml现在可以通过
OfflineSchema
元数据元素引用不存在的对象 . 这允许您指定无法连接到Biml引擎以基于SSIS构建的表或结果集 .https://varigence.com/Documentation/Language/Element/AstOfflineSchemaNode
在一个有点相关的说明,请查看Samuel Vanga's article并注意"Create Objects"方面 . 运行该包将在DB中创建表,之后您可以生成依赖于这些表的SSIS包 .
我用他的例子来实现以下工作流程:
阅读用于字段名称,数据类型的Excel工作簿电子表格(这是在平面文件中请求数据时为客户端提供的模板)
使用平面文件名/ ID,字段[名称,数据类型,分隔符,精度,比例等]填充元数据表
读取元数据表以通知平面文件源,创建登台表,创建读取平面文件的包以及填充登台表 .