Sql server 在SQL Server中将DT_DBTIMESTAMP2类型的列映射到datetime2时,发生转换规范的无效字符值错误
我正在创建一个SSIS包,以便将CSV文件导入到表中。目前,我正在导入一个平面文件,创建一个派生列,执行数据转换,然后将其加载到数据库中 包数据流 我遇到的问题是,在尝试将类型为Sql server 在SQL Server中将DT_DBTIMESTAMP2类型的列映射到datetime2时,发生转换规范的无效字符值错误,sql-server,datetime,ssis,visual-studio-2017,etl,Sql Server,Datetime,Ssis,Visual Studio 2017,Etl,我正在创建一个SSIS包,以便将CSV文件导入到表中。目前,我正在导入一个平面文件,创建一个派生列,执行数据转换,然后将其加载到数据库中 包数据流 我遇到的问题是,在尝试将类型为DT_DBTIMESTAMP2的列转换为datetime2时,它抛出以下错误: [OLE DB Destination[78]]错误:SSIS错误代码DTS_E_OLEDBERROR。发生OLE DB错误。错误代码:0x80004005。 OLE DB记录可用。来源:“Microsoft OLE DB Provider
DT_DBTIMESTAMP2
的列转换为datetime2
时,它抛出以下错误:
[OLE DB Destination[78]]错误:SSIS错误代码DTS_E_OLEDBERROR。发生OLE DB错误。错误代码:0x80004005。OLE DB记录可用。来源:“Microsoft OLE DB Provider for SQL Server”Hresult:0x80004005说明:“转换规范的字符值无效。”。
OLE DB记录可用。来源:“Microsoft OLE DB Provider for SQL Server”Hresult:0x80004005说明:“转换规范的字符值无效。” “我的数据”的格式为:
20-NOV-18 06.09.43.928460000 PM
在我的派生列中,我使用以下表达式,该表达式似乎给出了我要查找的结果:
"20" + SUBSTRING(DSTAMP,8,2) + "-" +
(SUBSTRING(DSTAMP,4,3) == "JAN" ? "01" :
SUBSTRING(DSTAMP,4,3) == "FEB" ? "02" :
SUBSTRING(DSTAMP,4,3) == "MAR" ? "03" :
SUBSTRING(DSTAMP,4,3) == "APR" ? "04" :
SUBSTRING(DSTAMP,4,3) == "MAY" ? "05" :
SUBSTRING(DSTAMP,4,3) == "JUN" ? "06" :
SUBSTRING(DSTAMP,4,3) == "JUL" ? "07" :
SUBSTRING(DSTAMP,4,3) == "AUG" ? "08" :
SUBSTRING(DSTAMP,4,3) == "SEP" ? "09" :
SUBSTRING(DSTAMP,4,3) == "OCT" ? "10" :
SUBSTRING(DSTAMP,4,3) == "NOV" ? "11" :
SUBSTRING(DSTAMP,4,3) == "DEC" ? "12" : " ")
+ "-" + LEFT(DSTAMP,2) + " " + SUBSTRING(DSTAMP,11,2) + ":" +
SUBSTRING(DSTAMP,14,2) + ":" + SUBSTRING(DSTAMP,17,2) + "." +
SUBSTRING(DSTAMP,20,7)
我设置了一个data viewer,它似乎给了我想要的结果:
数据查看器输出
我已经浏览了很多帖子,寻找答案,但没有找到一个适合我的情况。在失败之前,包正在通过OLE DB目标
我已经清理了输入文件以查找异常,所有行都是正确的
我想另一双眼睛可能会有所帮助,任何建议都将不胜感激 尝试在派生列内强制转换为(DT_db2):
(BT_DBTIMESTAMP2)("20" + SUBSTRING(DSTAMP,8,2) + "-" +
(SUBSTRING(DSTAMP,4,3) == "JAN" ? "01" :
SUBSTRING(DSTAMP,4,3) == "FEB" ? "02" :
SUBSTRING(DSTAMP,4,3) == "MAR" ? "03" :
SUBSTRING(DSTAMP,4,3) == "APR" ? "04" :
SUBSTRING(DSTAMP,4,3) == "MAY" ? "05" :
SUBSTRING(DSTAMP,4,3) == "JUN" ? "06" :
SUBSTRING(DSTAMP,4,3) == "JUL" ? "07" :
SUBSTRING(DSTAMP,4,3) == "AUG" ? "08" :
SUBSTRING(DSTAMP,4,3) == "SEP" ? "09" :
SUBSTRING(DSTAMP,4,3) == "OCT" ? "10" :
SUBSTRING(DSTAMP,4,3) == "NOV" ? "11" :
SUBSTRING(DSTAMP,4,3) == "DEC" ? "12" : " ")
+ "-" + LEFT(DSTAMP,2) + " " + SUBSTRING(DSTAMP,11,2) + ":" +
SUBSTRING(DSTAMP,14,2) + ":" + SUBSTRING(DSTAMP,17,2) + "." +
SUBSTRING(DSTAMP,20,7))
我不明白你怎么说,
我遇到的问题是在尝试将字符串转换为datetime2时,它抛出了以下错误:
之后,你显示了数据转换输出是正确的,这意味着字符串成功转换为时间戳。您是否将DT_STR
列映射到目标或DT_DBTIMESTAMP2
列??派生列正在生成所需的输出。我使用派生列来正确格式化字符串,以匹配DT_DBTIMESTAMP2所期望的内容。然后尝试将字符串转换为DT_DBTIMESTAMP2并将其加载到表中。前3个进程成功完成,但该进程在OLE DB目标失败,并出现提供的错误。希望这能把事情弄清楚一点。好的。然后最好编辑该问题,并指出问题在于将DT_DBTIMESTAMP2映射到datetime 2 column时试图在派生列中强制转换并收到相同的错误。@arrchar问题不清楚,您提到问题在于将字符串值赋给datetime2时,现在在上次编辑之后,问题更清楚了,我会试着把它弄出来