通过SSIS将csv文件中的datetimeoffset导入到表中的问题

时间:2019-09-10 12:57:30

标签: csv ssis etl datetimeoffset flatfilesource

我有一个csv作为源文件,正在尝试将数据从该文件加载到阶段SQL Server表中。有三个日期列。以下是这些列的值的示例:

2007-10-02T08:46:13+02:00

在SQL Server端,我已将datetimeoffset(7)定义为数据类型,并在SSIS连接管理器中选择了database timestamp with timezone [DT_DBTIMESTAMPOFFSET]作为数据类型。但是导入日期时间列时出现以下错误:

  

数据转换失败。列“ column1”的数据转换   返回状态值2和状态文本“该值不能为   转换,因为可能会丢失数据。”

     

错误:0xC0209029,位于   数据流任务,平面文件源[2]:SSIS错误代码   DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 “平面文件   Source.Outputs [平面文件源输出] .Columns [column1]“失败   因为发生错误代码0xC0209084,并且错误行的配置   关于“平面文件Source.Outputs [平面文件源   输出] .Columns [column1]“指定错误失败。错误   在指定组件的指定对象上发生。那里   可能是之前发布的错误消息,其中包含有关更多信息   失败。错误:数据流任务处出现0xC0202092,

     

平面文件源   [2]:在以下位置处理文件“ \ file.csv的路径”时发生错误   数据行2。错误:SSIS.Data Flow Task处错误:0xC0047038   错误代码DTS_E_PRIMEOUTPUTFAILED。 Flat上的PrimeOutput方法   文件源返回错误代码0xC0202092。该组件返回了   管道引擎调用PrimeOutput()时失败的代码。的   故障代码的含义由组件定义,但是   错误是致命的,管道停止执行。可能有   之前发布的错误消息,其中包含有关   失败。

您如何解决?还是为什么我会收到此错误?

2 个答案:

答案 0 :(得分:1)

在平面文件连接管理器中,将列数据类型保留为字符串(DT_WSTR或DT_STR),然后在“数据流任务”中添加具有以下表达式的派生列转换:

(DT_DBTIMESTAMPOFFSET, 7)REPLACE([DateColumn],"T"," ")

示例:

enter image description here

答案 1 :(得分:0)

首先尝试将其加载为字符串(长度约为25),然后尝试使用ssis中的“转换列”将其子字符串化,然后可以在加载到表之前尝试将其转换为另一个转换列中的datetime数据类型。