【问题标题】:SQL SSIS Importing CSV with specific datatypesSQL SSIS 导入具有特定数据类型的 CSV
【发布时间】:2014-09-28 14:15:10
【问题描述】:

我目前有一个表格,它定期从提供的 CSV 导入数据。问题是我有 6 个数据类型为 Decimal(5,2) 的列并且可以为空,当我导入一个不报告任何数字的文件时,它在这些中显示为“,,,,connectionfailed,,,”逗号通常是我希望导入表格的数字。

当 SSIS 尝试导入这些“空白”csv 时,我收到以下错误

错误:2014-08-04 23:45:01.31 代码:0xC020901C 来源:数据流任务 OLE DB 目标 [9] 描述:输入列“LaunchBBTime”(85)在输入“OLE DB 目标”时出现错误输入”(22)。返回的列状态为:“由于可能丢失数据,无法转换该值。”。结束错误

现在,当我将所有列更改为 varchar 以进行测试时,它可以毫无问题地导入空格,第二个问题是 SSRS 无法从 varchar 字段计算平均值(在这种情况下是为了性能)。

我的问题是我可以正确地让 SSIS 将空白列导入十进制 (5,2) 字段而不需要修改数据类型吗?

【问题讨论】:

  • 当有缺失值时,逗号的数量是否正确?逗号之间有空格吗?
  • 不幸的是,我没有生成这些 CSV 文件,并且对它们的显示方式的想法是:>Value1,value2,value3 而问题是 value1,,

标签: sql sql-server csv ssis


【解决方案1】:

看起来问题是由空格引起的,即“,”而不是“,”,否则数据类型会将字段设置为其默认值(在十进制“0”或NULL的情况下,取决于“保留源中的空值”属性)。如果是这种情况,可能最安全且性能成本更低的解决方案是将 csv 通过预处理以删除空格。

【讨论】:

  • 我查看了 csv,它们不包含逗号之间的空格。
  • 平面文件连接管理器中的字段是否设置为数字?
  • 它们实际上被设置为字符串,我会尝试改变它。
  • 是的,这可以解决问题。如果将它们更改为数字,它们将默认为 0;如果您更喜欢默认为 null,那么您需要将平面文件源设置为“保留源中的空值”
【解决方案2】:

将列作为 varchar 拉入,然后在派生列转换中,创建新的十进制列,其中填充类似于以下内容...

LEN(LTRIM([InputValue]))==0 ? NULL(DT_NUMERIC,5,2) : (DT_NUMERIC,5,2)[InputValue]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-10
    • 2016-09-27
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    相关资源
    最近更新 更多