Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssis 带VARCHAR(MAX)列的BIML平面文件格式_Ssis_Biml - Fatal编程技术网

Ssis 带VARCHAR(MAX)列的BIML平面文件格式

Ssis 带VARCHAR(MAX)列的BIML平面文件格式,ssis,biml,Ssis,Biml,到目前为止,我已经成功地使用BIML自动生成SSIS包(从CSV到SQL Server)。但在平面文件格式中有Varchar(MAX)列时,我遇到了一些问题 问题是,如果我以平面文件格式定义一个大小为-1的AnsiString类型的列,输出SSIS包将显示以下警告 以下输出列的元数据与 与输出列关联的外部列的元数据 关联的 如果我点击Yes,问题会自行解决,但这将是我的最后一个选项,因为我有150个包 当我选中平面文件源组件的高级选项时,我可以看到列Comments的数据类型有所不同,外部列显示

到目前为止,我已经成功地使用BIML自动生成SSIS包(从CSV到SQL Server)。但在平面文件格式中有Varchar(MAX)列时,我遇到了一些问题

问题是,如果我以平面文件格式定义一个大小为-1AnsiString类型的列,输出SSIS包将显示以下警告

以下输出列的元数据与 与输出列关联的外部列的元数据 关联的

如果我点击Yes,问题会自行解决,但这将是我的最后一个选项,因为我有150个包

当我选中平面文件源组件的高级选项时,我可以看到列Comments的数据类型有所不同,外部列显示为DT_TEXT,而输出列显示为DT_STR.:(

我不明白的是,为什么当所有其他列都正常工作时,输出列只显示Varchar(Max)的不同数据类型。输出列不是从外部列生成的吗

请参见下面的biml代码


在数据流中,DT_STR的长度在0到8000之间。平面文件连接管理器很乐意让您指定大于8k的长度

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

如果您了解SSIS如何从数据流中获得性能的概念,这是有意义的。它预先分配内存并在该内存空间中执行所有转换。您会为MAX类型分配多少内存?确切地说

因此,您需要使用一种流数据类型:DT_TEXT或DT_NTEXT。这些类型允许无限长的字符串

Biml 我真的被难住了,希望Scott能插话。发出的DTSX将看起来像之前的屏幕截图,数据类型为DT_STR,长度为零。它运行良好,只是看起来不好。当你双击让编辑器修复它时,它会变为DT_文本

我认为这只是一个在执行SQL任务中提供数据类型覆盖的问题,但没有用,它不是平面文件源中Columns集合的属性

也许在这种情况下,我需要处理Dataflow overrides属性

                        <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_文本,但我仍然得到警告

深入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" />

而VS2013使用原始代码发出的,我们得到

<externalMetadataColumn 
    codePage="1252" 
    dataType="str" 
    name="Comments" 
    refId="Package\DFT Load Data\FF_SRC.Outputs[Output].ExternalColumns[Comments]">
</externalMetadataColumn>


这可能会令人不快,但可能有一点XSLT可以找到您有此命名列和数据类型为
str
的任何实例,并将其转换为
text
我没有尝试,但在Varigance文档中找到了它:

<!-- A Length of -1 will automatically be converted to nvarchar(max)/varchar(max) -->
<Column Name="LongString" DataType="String" Length="-1" />


感谢您的回复。反向工程Biml代码的输出仍然相同。例如,输出列将DT_文本更改为长度为0的DT_STR,除非我双击修复,否则包将失败。我有150个包,很难打开每个包来修复此错误。我想知道其他人是如何处理的通过Biml作为Varchar(最大值)是一种常见的数据类型。虽然我没有对数据做任何处理,但我的版本对我来说运行得很好,并带有tact警告。它也没有接近8k边界。嗨,Billinkc,我真的遇到了这个问题。你认为Scott能帮上忙吗。我今天再次尝试了反向工程代码,但它仍然在做同样的事情。@MSBI Geek可能没有向Varigence网站上的支持箱发送电子邮件会造成伤害。查看是否有解决方法。假设代码正确,似乎是一个缺陷。挑战将取决于与BIDS助手团队协调发布。2015年3月7日更新:遗憾的是,我从未收到Varigence对此问题的回复,我在他们的论坛上发布了帖子,还通过电子邮件发送了varigence支持。我最终使用powershell更新包xml文件。长度为-1的文件将自动转换为nvarchar(max)/varchar(max)