2014-09-09 2 views
0

Biml (ou SSIS) ne semble pas vouloir identifier automatiquement le délimiteur de ligne. Sans une colonne avec un manuellement défini sur la dernière colonne de la liste de colonnes au délimiteur de ligne prévu SSIS ne définit pas le délimiteur correctement pour la ligne. Je suppose que SSIS implique simplement le délimiteur de ligne même s'il est défini dans les propriétés de connexion. Quelqu'un sait d'un correctif pour cela autre que d'écrire autour du problème et en définissant le delmiter de la dernière colonne au délimiteur de ligne voulu (voir Colonne "T" ci-dessous)?FlatFileFormat ne génère pas le package SSIS Correctement

J'ai vérifié les propriétés de la sortie de connexion et indique bien le « RowDelimiter » comme CRLF, mais si vous regardez le

Voici le fichier 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> 

Voici la SSIS « code » à la colonne T ci-dessus, s'il vous plaît noter qu'une ligne délimiteur est spécifié (sauts de ligne dans le fichier d'exportation):

<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> 

Voici le SSIS « code » sans T Colonne Abov e, s'il vous plaît noter qu'une ligne délimiteur est spécifié (aucun saut de ligne dans le fichier d'exportation):

<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> 

Voici le script que j'utilisé pour créer la table sur la base de données de connexion

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' 

Répondre

0

Vous avez un Hypothèse incorrecte en ce que le délimiteur de la dernière colonne ne doit pas être CRLF. Vous verrez dans tous les exemples liés, bien que contre-intuitif, votre fichier de format de fichier plat devrait utiliser votre délimiteur de ligne comme délimiteur de colonne pour la colonne finale. Chaque autre colonne utiliserait votre délimiteur de colonne "standard". Et oui, il est répété à partir de la déclaration d'en-tête de ce que devrait être votre délimiteur de ligne.

Certaines personnes jonglent oies ...