Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何处理SSI中的空/空白_Sql Server_Ssis_Etl_Ssis 2012_Ssis 2008 - Fatal编程技术网

Sql server 如何处理SSI中的空/空白

Sql server 如何处理SSI中的空/空白,sql-server,ssis,etl,ssis-2012,ssis-2008,Sql Server,Ssis,Etl,Ssis 2012,Ssis 2008,我正在构建一个SSIS包,以便将平面文件(CSV)加载到SQL server 当我尝试将state\u code(char(2))列插入到SQL server时,出现以下错误。如果我将目标数据类型更改为Char(4),则包将成功执行 我怀疑这是由于CSV中的“NULL”而产生的问题。这个包将NULL作为4个字符,并试图插入到目的地(Char(2))。我在谷歌上搜索了很多。但我在任何地方都没有发现类似的情况 [平面文件源[2]]错误:数据转换失败。列“column_1”的数据转换返回状态值4和状态

我正在构建一个SSIS包,以便将平面文件(CSV)加载到SQL server

当我尝试将
state\u code
(char(2))列插入到SQL server时,出现以下错误。如果我将目标数据类型更改为Char(4),则包将成功执行

我怀疑这是由于CSV中的“NULL”而产生的问题。这个包将NULL作为4个字符,并试图插入到目的地(Char(2))。我在谷歌上搜索了很多。但我在任何地方都没有发现类似的情况

[平面文件源[2]]错误:数据转换失败。列“column_1”的数据转换返回状态值4和状态文本“文本被截断或一个或多个字符在目标代码页中不匹配。”


只需使用以下表达式添加派生列转换,即可将
的“NULL”
字符串替换为
NULL
值:

UPPER([Column]) == "NULL" ? NULL(DT_WSTR,2) : [Column]
或者可以用空字符串替换它

UPPER([Column]) == "NULL" ? "" : [Column]
更新1

根据你的评论,我发布了这个更新

NULL()
函数将数据类型作为参数,因此如果使用日期列,可以使用
NULL(dtu-Date)

对于日期列,可以使用以下表达式:

UPPER([Column]) == "NULL" ? NULL(DT_DATE) : [Column]
UPPER([Column]) == "NULL" ? NULL(DT_I4) : [Column]
对于整数列,可以使用以下表达式:

UPPER([Column]) == "NULL" ? NULL(DT_DATE) : [Column]
UPPER([Column]) == "NULL" ? NULL(DT_I4) : [Column]

当您将数据从数据库导出到平面文件时,您无法处理数据类型INT的空值。请参阅此链接,其中哪些数据类型处理空值:

在CSV文件中,如果单元格包含单词“null”,则其值为4个字符的字符串“null”。空白单元格将被解释为值
NULL
。“NULL”和
NULL
不一样。您可以使用。放置在源和目标之间。使用它将字符串null替换为null值。要添加@Larnu所说的内容,通常是因为Excel倾向于将实际的
null
字段替换为文本
“null”
,谢谢大家,可以告诉我在派生列中执行此操作的表达式吗。这是一个CSV文件。对于您引用的文件类型:Microsoft Excel逗号分隔值文件(.csvI)对于日期和整数列,我遇到了相同的问题。日期列和整数列的表达式是什么?您可以在此处阅读更多内容:对于日期列,您可以使用:
NULL(DT_日期)
对于整数
NULL(DT_I4)