到目前为止,我已经成功地使用BIML自动生成SSIS包(从CSV到Server)。但是,我遇到了一些问题,在任何情况下,我都会使用平面文件格式的Varchar(MAX)列。
问题是,如果我以平面文件格式定义了大小为-1的AnsiString类型的列,则输出SSIS包将显示以下警告
以下输出列的元数据与与其关联的外部列的元数据不匹配。
如果我单击“是”,问题会自行解决,但这将是我最后的选择,因为我有150个包。
当我检查平面文件源组件的高级选项时,我可以看到列Comments的数据类型不同,外部列显示为DT_TEXT,其中输出列显示DT_STR。:(
我不明白的是,为什么在所有其他列都正常工作的情况下,输出列只显示了Varchar(Max)的不同数据类型。输出列不是从外部列生成的吗?
请参阅下面的biml代码。
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<FileFormats>
<FlatFileFormat Name="MetadataFileFormat" RowDelimiter="LF" ColumnNamesInFirstDataRow="true" IsUnicode="false">
<Columns>
<Column Name="Category" DataType="AnsiString" Length="128" Delimiter="|" CodePage="1252" />
<Column Name="Comments" DataType="AnsiString" Length="-1" Delimiter="|" />
<Column Name="DisplayName" DataType="AnsiString" Length="256" Delimiter="CRLF" />
</Columns>
</FlatFileFormat>
</FileFormats>
<Connections>
<FlatFileConnection Name="FF_Test" FilePath="C:\Data\Sample.csv" FileFormat="MetadataFileFormat">
</FlatFileConnection>
</Connections>
<Packages>
<Package Name="FFTest" ConstraintMode="Linear">
<Tasks>
<Dataflow Name="DFT Load Data">
<Transformations>
<FlatFileSource Name="FF_SRC" ConnectionName="FF_Test">
</FlatFileSource>
</Transformations>
</Dataflow>
</Tasks>
</Package>
</Packages>
</Biml>

发布于 2016-02-16 18:40:58
在数据流中,DT_STR的长度介于0到8000之间。平面文件连接管理器很乐意让您指定大于8k的长度。

但是,当您尝试在数据流中使用它时,组件将报告它不是有效的长度

如果您知道SSIS如何从数据流中获得性能的概念,这是有意义的。它分配内存并在该内存空间中执行所有转换。您将为MAX类型分配多少内存?正是..。
因此,您需要使用一种流数据类型: DT_TEXT或DT_NTEXT。这些允许无限长的字符串。
比姆尔
我真的很困惑,希望斯科特能参与进来。发出的DTSX看起来像前屏幕截图,数据类型为DT_STR,长度为零。一切都很好,只是看起来很糟。当您双击以让编辑器修复它时,它将更改为DT_TEXT。

我认为这只是提供数据类型覆盖的问题,就像在Execute SQL Task中那样,但是没有用,它不是平面文件源中列集合的属性。
也许这是我需要处理Dataflow重写属性的情况..。
<DataflowOverrides>
<OutputPath OutputPathName="Output">
<Columns>
<Column
ColumnName="Comments"
DataType="AnsiString"
CodePage="1252"
Length="-1"
></Column>
</Columns>
</OutputPath>
</DataflowOverrides>但是没有,这没有给我更好的结果。
好吧,我放弃和“欺骗”使用Mist/BimlOnline反向工程的校正包回到Biml。
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Connections>
<FlatFileConnection Name="FF_Test" FilePath="C:\ssisdata\SO\Input\so_35438946.txt" FileFormat="FF_Test" />
</Connections>
<Packages>
<Package Name="so_35438946_re" Language="None" VersionBuild="1" CreatorName="BillFellows" CreatorComputerName="AVATHAR" CreationDate="2016-02-16T13:02:49">
<Tasks>
<Dataflow Name="DFT Load Data">
<Transformations>
<DerivedColumns Name="DER Placeholder">
<InputPath OutputPathName="FF_SRC.Output" />
</DerivedColumns>
<FlatFileSource Name="FF_SRC" LocaleId="None" FileNameColumnName="" ConnectionName="FF_Test" />
</Transformations>
</Dataflow>
</Tasks>
<Connections>
<Connection ConnectionName="FF_Test" />
</Connections>
</Package>
</Packages>
<FileFormats>
<FlatFileFormat Name="FF_Test" CodePage="1252" TextQualifer="_x003C_none_x003E_" ColumnNamesInFirstDataRow="true" RowDelimiter="LF">
<Columns>
<Column Name="Category" Length="128" DataType="AnsiString" Delimiter="VerticalBar" MaximumWidth="128" />
<Column Name="Comments" Length="-1" DataType="AnsiString" Delimiter="VerticalBar" />
<Column Name="DisplayName" Length="256" DataType="AnsiString" Delimiter="CRLF" MaximumWidth="256" />
</Columns>
</FlatFileFormat>
</FileFormats>
</Biml>现在我只需要生成SSIS包..。嗯,我想是进步了。注释被识别为DT_TEXT,但我仍然收到警告。

深潜dtsx
在数据流的平面文件源中,此列的外部元数据集合定义如下
<externalMetadataColumn
codePage="1252"
dataType="str"
name="Comments"
refId="Package\DFT Load Data\FF_SRC.Outputs[Output].ExternalColumns[Comments]"></externalMetadataColumn>在开始,我们让编辑调整
<externalMetadataColumn
refId="Package\DFT Load Data\FF_SRC.Outputs[Output].ExternalColumns[Comments]"
codePage="1252"
dataType="text"
name="Comments" />使用原始代码从VS 2013发出的代码,我们得到
<externalMetadataColumn
codePage="1252"
dataType="str"
name="Comments"
refId="Package\DFT Load Data\FF_SRC.Outputs[Output].ExternalColumns[Comments]">
</externalMetadataColumn>这可能是令人不快的,但可能有一点XSLT可以找到任何实例,其中有这个命名的列和数据类型的str,并将其转换为text。
发布于 2019-11-13 13:23:55
我没有尝试,但在Varigance文档中找到了它:
<!-- A Length of -1 will automatically be converted to nvarchar(max)/varchar(max) -->
<Column Name="LongString" DataType="String" Length="-1" />https://stackoverflow.com/questions/35438946
复制相似问题