【问题标题】:Data conversion fails when trying to import values with . precision尝试使用 导入值时数据转换失败。精确
【发布时间】:2020-06-14 11:57:36
【问题描述】:

我有以下 csv 文件:

EmployeeId,PayRate
12,2.50
15,5.33
56,7.28

我正在尝试将数据存储在 SQL Server 表中,如下所示:

使用转化组件:

“由于潜在的损失,无法转换该值 数据。”

使用派生列:

ISNULL(PayRate) ? (DT_R4)0.00 : (DT_R4)PayRate

 SSIS 错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。

“派生列”失败,因为出现错误代码 0xC0049063, 以及“Colonne dérivée.Entrées[Entrée de colonne dérivée].Colonnes[PayRate]" 指定错误时失败。

在我的情况下,我无法找到用于存储 PayRate 的正确类型。

【问题讨论】:

  • 您要插入多少行?有可能还有一排更糟糕的数据。我个人会使用DECIMAL,而不是FLOAT。浮动仅在有限的情况下有用
  • 我有大约 300 行。我有同样的使用 ISNULL((DT_DECIMAL,2)PayRate) 吗? (DT_DECIMAL,2)0.00 : (DT_DECIMAL,2)PayRate
  • 我总是建议导入 varchar 并在数据库中检查它。您还可以检查文本源并查看它认为是什么数据类型。
  • 很多可能的原因,在尝试之前无法确定确切的原因。我经常遇到因为 2.50 使用点 '.'对于十进制数,您应该使用逗号“,”,但在 CSV 文件中,它将被视为单独的列。所以我认为最好把它拉成varchar,在派生列中,替换'.'到 ',' 之后,再将数据从 varchar 转换为 float 或 decimal
  • 这就是我通常的做法。 Excel 和文本驱动程序非常不可靠,所以我不再浪费时间。您可以使用 TRY_CAST 将 varchar 转换为其他数据类型而不会出错。只需确保数据以正确的数据类型结束。我推荐 DECIMAL(12,6) 超过 float 之类的东西,因为浮点数不精确

标签: sql-server csv ssis


【解决方案1】:

我最终使用派生列将. 替换为,

REPLACE(PayRate,".",",")

然后将其转换为DT_NUMERIC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 2017-05-29
    • 2020-11-19
    • 2020-06-25
    相关资源
    最近更新 更多