如何处理SSIS中的NULL /空白

时间:2017-12-21 15:16:37

标签: sql-server ssis etl ssis-2012 ssis-2008

我正在构建一个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和状态文本“文本被截断或目标代码页中的一个或多个字符不匹配。”。

2 个答案:

答案 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)