【问题标题】:SSIS flat file source sql destination errorSSIS平面文件源sql目标错误
【发布时间】:2018-08-02 02:33:38
【问题描述】:

我有一个包含多个字段的 csv 文件,所有字段都显示为:

Datatype - string [DT_STR]
OutputColumnWidth - 50

到我的输出 SQL 表的映射适用于所有 varchar(50) 的字段。

我使用的是 SQL Server 2012,并且使用的是 SQL Server Native Client 11.0。

我收到以下截断错误:

Messages
Error 0xc02020a1: Data Flow Task 1: Data conversion failed. The data conversion for column "Description" returned status value 4 and status text "Text was truncated or one or more characters had no match in the target code page.".
 (SQL Server Import and Export Wizard)

Error 0xc020902a: Data Flow Task 1: The "Source - myfilename_CSV.Outputs[Flat File Source Output].Columns[Description]" failed because truncation occurred, and the truncation row disposition on "Source - myfilename_CSV.Outputs[Flat File Source Output].Columns[Description]" specifies failure on truncation. A truncation error occurred on the specified object of the specified component.
 (SQL Server Import and Export Wizard)

我该如何解决这个问题?

我尝试的是在我的源中设置该列:

Datatype - string [DT_STR]
OutputColumnWidth - 200

在我的目标 sql 表上,我将其设置为 varchar(200)。

在我这样做之后,其他几个列会触发相同的错误,并且如上所述更改源和目​​标的宽度。

包仍然失败。为什么这不起作用?

我已经在 SQL Server 2012 和 2015 上进行了尝试。我已经使用了导入向导和实际的 ssis 包。

【问题讨论】:

    标签: sql-server ssis ssis-2012


    【解决方案1】:

    当您导入平面文件时,没有元数据可以告诉 SSIS 文件中包含哪些数据类型,就像您从数据库导入时一样。

    因此,您需要手动设置数据类型以匹配您要导入的数据并相应地构建表。

    例如,如果您的平面文件包含:

    • Col1 - 字符串 - 文件的最大长度为 246 个字符
    • Col2 - 日期 - 格式为 yyyy-mm-dd
    • Col3 - 字符串 - 文件的最大长度为 62 个字符

    您需要将连接管理器设置为导入如下:

    • Col1 - string [DT_STR] - 长度至少为 246
    • Col2 - Date [DT_DATE]
    • Col3 - string [DT_STR] - 长度至少为 62

    您不能只猜测您的数据类型或依靠 SSIS 来使它们正确。实际了解您的数据并使用适当的格式将其导入。

    【讨论】:

    • 有道理。但我的挂断是我将通过以下方式返回执行此操作:[right click flat file source -> show advanced editor -> input and output properties -> flat file source output -> external columns / output columns] 然后我将引用的列更改为适当的数据类型。但是,这似乎不起作用并给出:the metadata of the following output columns does not match the meta data of the external columns with which the output columns are associated。如何返回并修复源文件列的数据类型/元数据并将其与我的输出相关联?
    • 另外请注意,我最初不知道源代码中某些 DT_STR 字段的合适大小。因此,由 oledb 目标创建的表具有来自我的源平面文件(例如 varchar(50))的初始值。如果在我最初为我的 oledb 目标设置连接时已经创建了表,那么在我的源中的事实之后更改元数据如何传播到目标?解决此问题的唯一方法是在将所有源数据类型映射到目标之前了解并正确设置它们吗?
    • @mo_maat 您需要更改连接管理器中的数据类型,然后确保您的平面文件源与它们匹配。双击您的平面文件连接并在弹出的编辑器中单击左侧的Advanced 并在那里编辑列数据类型。完成后,打开您的平面文件源并刷新元数据。关于您的第二条评论,请调查您的来源或在可以根据需要删除和重新创建表的环境中创建初始表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 2023-03-22
    相关资源
    最近更新 更多