我正在构建一个SSIS包来将平面文件(CSV)加载到SQL Server。
当我尝试将df.groupby('a').nth(-1)
-
b
a
1 21
2 30
3 41
(char(2)列)插入SQL服务器时,我收到以下错误。如果我将目标数据类型更改为Char(4),则程序包将成功执行。
我怀疑这是由于CSV中的“NULL”而产生的问题。该包将NULL作为4个字符并尝试插入到Destination(Char(2))。我google了很多。但我在任何地方都没有发现任何类似的情况。
[平面文件源[2]]错误:数据转换失败。列“Column_1”的数据转换返回状态值4和状态文本“文本被截断或目标代码页中的一个或多个字符不匹配。”。
答案 0 :(得分:1)
只需使用以下表达式添加派生列转换,即可将"NULL"
字符串替换为NULL
值:
UPPER([Column]) == "NULL" ? NULL(DT_WSTR,2) : [Column]
或者您可以用空字符串替换它
UPPER([Column]) == "NULL" ? "" : [Column]
更新1
根据您发表此更新的评论
NULL()
函数将数据类型作为参数,因此,如果您使用的是日期列,则可以使用NULL(DT_DATE)
Read more 。
对于Date列,您可以使用以下表达式:
UPPER([Column]) == "NULL" ? NULL(DT_DATE) : [Column]
对于整数列,您可以使用以下表达式:
UPPER([Column]) == "NULL" ? NULL(DT_I4) : [Column]
答案 1 :(得分:0)
当您将数据从数据库导出到平面文件时,则无法处理数据类型为INT的空值。请参考以下链接,其中哪些数据类型处理空值:Microsoft SQL Docs: NULL (SSIS Expression)