导入包含columnigig NULL值或逗号的CSV文件时出现问题

时间:2020-06-03 20:10:26

标签: sql-server tsql ssis biml

我有一个包含两列的CSV文件:

Employee_Name,EmpID
"Harry, Watson",1
"Amy, Black",2
"O'hare, Lynn",3
Jeremy Prater,4
,,
,,

我正在使用biml生成我的软件包:

<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<FileFormats>
        <FlatFileFormat Name="FlatFile" CodePage="1252" TextQualifer="&quot;"
        ColumnNamesInFirstDataRow="true" IsUnicode="false">            
            <Columns>
                <Column Name="Employee_Name" DataType="AnsiString"  Length="255" Delimiter="Comma" />
                <Column Name="EmpID" DataType="Int64" Delimiter="Comma" />


            </Columns>
        </FlatFileFormat>
</FileFormats>

<Connections>
    <FlatFileConnection Name="importexcel"
        FilePath="HR.csv"
        FileFormat="FlatFile" />
    <Connection Name="AppSTG" 
        ConnectionString="XXXX"></Connection>
</Connections>


<Databases>

    <Database Name="STG_App" ConnectionName="AppSTG"></Database>

</Databases>


<Schemas>
    <Schema Name="HR" DatabaseName="STG_App"></Schema>
</Schemas>    

<Tables>
    <Table Name="Employee" SchemaName="STG_App.HR">
            <Columns>
               <Column Name="Employee_Name" DataType="AnsiString" Length="255" />
                <Column Name="EmpID" DataType="Int64"  />
        </Columns>
        </Table>

</Tables>    
<Packages>
        <Package Name="Load Flat File Data" >
            <Tasks>
                <Dataflow Name="Load Flat File Data">
                    <Transformations>
                        <FlatFileSource ConnectionName="importexcel" Name="FlatFile"/>
                        <OleDbDestination Name="Target" ConnectionName="AppSTG">
                            <TableOutput TableName="STG_App.HR.Employee" />
                        </OleDbDestination>
                    </Transformations>
                </Dataflow>
            </Tasks>
        </Package>
    </Packages>




</Biml>

要创建以下数据流:

enter image description here

当我尝试执行程序包时,出现以下错误:

«数据转换失败。列“ EmpID”的数据转换 返回状态值2和状态文本“该值不能为 由于潜在的数据丢失而导致转换。”。

1 个答案:

答案 0 :(得分:3)

您已将EmpID字段定义为Int64,当您在那里有数字时,该字段将非常有用,但是如果没有数据(但仍然存在行),SSIS将尝试将空字符串转换为数字,这将失败。

如果您从平面文件源添加了一条用于截断/错误/等的错误路径,则会看到第5行以上沿着该路径。对于此数据,我将根据需要将所有内容定义为字符串,以将数据放入管道中,然后您需要根据有意义的任何业务规则(无名称/标识,将其丢弃)对它进行操作。 / p>

正如@alex在评论中指出的那样,最后一行指示数据的三列,而您已经定义了两列,因此当平面文件源到达该列时,您将被炸毁。 SSIS无法处理这种不一致的文件格式。