【发布时间】: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