0

Biml (または SSIS) は、行区切り文字を自動的に識別したくないようです。列リストの最後の列を意図した行区切り記号に手動で設定した列がないと、SSIS は行の区切り記号を正しく設定しません。接続プロパティで設定されていても、SSIS は行区切り記号を暗示しているだけだと思います。問題を回避し、最後の列の区切り文字を意図した行区切り文字に設定する以外に、これに対する修正を知っている人はいますか (以下の「T」列を参照)。

出力接続のプロパティを確認したところ、「RowDelimiter」が CRLF として適切に示されていますが、

Biml ファイルは次のとおりです。

<Biml xmlns="http://schemas.varigence.com/biml.xsd">
  <Connections>
    <OleDbConnection Name="Source" ConnectionString="Provider=SQLNCLI11;Server=localhost;Initial Catalog=test;Integrated Security=SSPI;">
    </OleDbConnection>
    <FlatFileConnection Name="Created" FilePath="D:\\created.dat" FileFormat="Changed">
      <Expressions>
        <Expression PropertyName="ConnectionString">@[$Package::FileDropRoot] + "\\"+REPLACE((DT_WSTR, 10)(DT_DBDATE)GETDATE(),"-","") + "." + "created.dat"</Expression>
      </Expressions>
    </FlatFileConnection>
  </Connections>
  <FileFormats>
    <FlatFileFormat Name="Changed" ColumnNamesInFirstDataRow="true" HeaderRowDelimiter="CRLF" RowDelimiter="CRLF">
      <Columns>
        <Column Name="col1" DataType="String" Delimiter="Comma" ColumnType="Delimited" />
        <Column Name="col2" DataType="String" Delimiter="Comma" ColumnType="Delimited"/>
        <!-- this must be here in order to terminate the row -->
        <Column Name="T" DataType="String" Delimiter="Comma" ColumnType="CRLF"/>
      </Columns>
    </FlatFileFormat>
  </FileFormats>
  <Packages>
    <Package Name="Test" ConstraintMode="Linear" ProtectionLevel="EncryptSensitiveWithUserKey">
      <Tasks>
        <Dataflow Name="Test">
          <Transformations>
            <OleDbSource Name="Select Stagement" ConnectionName="Source">
              <DirectInput>
                  Select * From Test
              </DirectInput>
            </OleDbSource>
           <FlatFileDestination Name="UpdateFile" ConnectionName="Created">
            </FlatFileDestination>
          </Transformations>
        </Dataflow>
      </Tasks>
      <Parameters>
        <Parameter Name="FileDropRoot" DataType="String">D:\FileDrop</Parameter>
      </Parameters>
    </Package>
  </Packages>
</Biml>

上記の T 列を含む SSIS "コード" を次に示します。行区切り記号が指定されていることに注意してください (エクスポート ファイルの改行)。

<DTS:ConnectionManager DTS:CreationName="FLATFILE" DTS:DTSID="{9CDCB838-2A42-4CCA-A59C-DC60E9B3A967}" DTS:ObjectName="Created" DTS:refId="Package.ConnectionManagers[Created]">
  <DTS:ObjectData>
    <DTS:ConnectionManager DTS:CodePage="1252" DTS:ColumnNamesInFirstDataRow="True" DTS:ConnectionString="D:\\created.dat" DTS:Format="Delimited" DTS:HeaderRowDelimiter="_x000D__x000A_" DTS:LocaleID="1033" DTS:RowDelimiter="_x000D__x000A_" DTS:TextQualifier="_x003C_none_x003E_" DTS:Unicode="True">
      <DTS:FlatFileColumns>
        <DTS:FlatFileColumn DTS:ColumnDelimiter="_x002C_" DTS:ColumnType="Delimited" DTS:CreationName="" DTS:DataType="303" DTS:DTSID="{D64391D4-4551-44E9-8539-4C473EB700AA}" DTS:ObjectName="col1" DTS:TextQualified="True">
        </DTS:FlatFileColumn>
        <DTS:FlatFileColumn DTS:ColumnDelimiter="_x002C_" DTS:ColumnType="Delimited" DTS:CreationName="" DTS:DataType="303" DTS:DTSID="{974ED1AD-7D72-4A65-A877-BADEC09DAF20}" DTS:ObjectName="col2" DTS:TextQualified="True">
        </DTS:FlatFileColumn>
        <DTS:FlatFileColumn DTS:ColumnDelimiter="_x000D__x000A_" DTS:ColumnType="Delimited" DTS:CreationName="" DTS:DataType="303" DTS:DTSID="{4347C3C1-39BD-40B1-B38F-526730FE7BFB}" DTS:ObjectName="T" DTS:TextQualified="True">
        </DTS:FlatFileColumn>
      </DTS:FlatFileColumns>
    </DTS:ConnectionManager>
  </DTS:ObjectData>
  <DTS:PropertyExpression DTS:Name="ConnectionString">@[$Package::FileDropRoot] + "\\"+REPLACE((DT_WSTR, 10)(DT_DBDATE)GETDATE(),"-","") + "." + "created.dat"</DTS:PropertyExpression>
</DTS:ConnectionManager>

上記の T 列のない SSIS "コード" を次に示します。行区切り記号が指定されていることに注意してください (エクスポート ファイルに改行はありません)。

<DTS:ConnectionManager DTS:CreationName="FLATFILE" DTS:DTSID="{79E9C576-FD53-4D4F-A07C-AED8D4CE72E6}" DTS:ObjectName="Created" DTS:refId="Package.ConnectionManagers[Created]">
  <DTS:ObjectData>
    <DTS:ConnectionManager DTS:CodePage="1252" DTS:ColumnNamesInFirstDataRow="True" DTS:ConnectionString="D:\\created.dat" DTS:Format="Delimited" DTS:HeaderRowDelimiter="_x000D__x000A_" DTS:LocaleID="1033" DTS:RowDelimiter="_x000D__x000A_" DTS:TextQualifier="_x003C_none_x003E_" DTS:Unicode="True">
      <DTS:FlatFileColumns>
        <DTS:FlatFileColumn DTS:ColumnDelimiter="_x002C_" DTS:ColumnType="Delimited" DTS:CreationName="" DTS:DataType="303" DTS:DTSID="{BBCA22D2-5D3E-47AC-AA0A-413C0C1A5CB2}" DTS:ObjectName="col1" DTS:TextQualified="True">
        </DTS:FlatFileColumn>
        <DTS:FlatFileColumn DTS:ColumnDelimiter="_x002C_" DTS:ColumnType="Delimited" DTS:CreationName="" DTS:DataType="303" DTS:DTSID="{44E567E4-BE78-432C-A8AC-C388E8BCFADC}" DTS:ObjectName="col2" DTS:TextQualified="True">
        </DTS:FlatFileColumn>
      </DTS:FlatFileColumns>
    </DTS:ConnectionManager>
  </DTS:ObjectData>
  <DTS:PropertyExpression DTS:Name="ConnectionString">@[$Package::FileDropRoot] + "\\"+REPLACE((DT_WSTR, 10)(DT_DBDATE)GETDATE(),"-","") + "." + "created.dat"</DTS:PropertyExpression>
</DTS:ConnectionManager>

データベース接続でテーブルを作成するために使用したスクリプトは次のとおりです

CREATE TABLE Test(col1 varchar(25),col2 varchar(25))

INSERT INTO Test 
SELECT '1','2' UNION all
SELECT '1','2' UNION all
SELECT '1','2' UNION all
SELECT '1','2' UNION all
SELECT '1','2' UNION all
SELECT '1','2' UNION all
SELECT '1','2' UNION all
SELECT '1','2' UNION all
SELECT '1','2' UNION all
SELECT '1','2' UNION all
SELECT '1','2' UNION all
SELECT '1','2' UNION all
SELECT '1','2' UNION all
SELECT '1','2' UNION all
SELECT '1','2' UNION all
SELECT '1','2' UNION all
SELECT '1','2' UNION all
SELECT '1','2' UNION all
SELECT '1','2' UNION all
SELECT '1','2' UNION all
SELECT '1','2' UNION all
SELECT '1','2' UNION all
SELECT '1','2' UNION all
SELECT '1','2'
4

1 に答える 1