Ssis 将字符串转换为日期时间(使用SSI)

Ssis 将字符串转换为日期时间(使用SSI),ssis,Ssis,我想在SQL Server表的列(datetime)中插入一个值“5/27/2013 16:42:37.490000”(从平面文件(DT_STR)读取)。如果我尝试在派生列中使用(DT_DBDATE)或DT_DBTIMESTAMP强制转换它,它会给出一个错误 [Derived Column [130]] Error: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR. The "component "Derived Column" (13

我想在SQL Server表的列(datetime)中插入一个值“5/27/2013 16:42:37.490000”(从平面文件(DT_STR)读取)。如果我尝试在派生列中使用(DT_DBDATE)或DT_DBTIMESTAMP强制转换它,它会给出一个错误

[Derived Column [130]] Error: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR.  The "component "Derived Column" (130)" failed because error code 0xC0049064 occurred, and the error row disposition on "output column "Derived Column 1" (155)" specifies failure on error. An error occurred on the specified object of the specified component.  There may be error messages posted before this with more information about the failure.
我该怎么做呢


感谢该值是
datetime2
类型。AFAIK SSIS不支持datetime2。您需要将其作为字符串存储在数据库中,然后通过将其转换为datetime2来更新列

SUBSTRING(TMS_CREAT,(FINDSTRING(TMS_CREAT,"/",2) + 1),4) + "-" + SUBSTRING(TMS_CREAT,1,(FINDSTRING(TMS_CREAT,"/",1) - 1)) + "-" + SUBSTRING(TMS_CREAT,(FINDSTRING(TMS_CREAT,"/",1) + 1),2) + SUBSTRING(TMS_CREAT,(FINDSTRING(TMS_CREAT,"/",2) + 5),16)
这是

更新:使用
DT_DBTIMESTAMP2
可以将字符串转换为正确的日期时间格式

下面的代码在派生列中工作得非常好

(DT_DBTIMESTAMP2,7)"2013-5-27 16:42:37.490000"
7是这里的进动。如果日期时间的格式不同,上面的代码将不起作用。例如
MM/DD/YYYY HH:MM:ss.ffffff

但是,您可以使用
脚本组件
并将不同日期时间格式的数组传递给
datetime.ParseExact
函数

步骤1:拖动脚本组件并创建一个新的输出列
DT_DBTIMESTAMP
数据类型,并将其命名为
NewDate

第二步:写下下面的C代码


我不会说这是一个完美的解决方案,但只是一个权宜之计。 格式化输入,然后插入。使用以下表达式后的格式化数据可以很好地与datetime或datetime2配合使用

SUBSTRING(TMS_CREAT,(FINDSTRING(TMS_CREAT,"/",2) + 1),4) + "-" + SUBSTRING(TMS_CREAT,1,(FINDSTRING(TMS_CREAT,"/",1) - 1)) + "-" + SUBSTRING(TMS_CREAT,(FINDSTRING(TMS_CREAT,"/",1) + 1),2) + SUBSTRING(TMS_CREAT,(FINDSTRING(TMS_CREAT,"/",2) + 5),16)

谢谢Praveen让我知道了这一点。这方面的工作是什么?由于某些限制,您上面提到的转换无法应用于。@Akshay否,该MS Connect链接中的一个条目说:“要在SSIS中使用DATETIME2类型,请使用DT_DBTIMESTAMP2类型。”这是一个不受支持的AS400 DATETIME2类型。对于SQL Server类型,您只需要知道如何将其命名为“DT_DBTIMESTAMP2”。我无法使用它,因此产生了这个问题。你能告诉我我能用的表达方式吗。现在,SQL表列的类型是(DATETIME类型)。如何插入上述值?我是否需要更改我的表列类型???首先将其作为varchar插入到一个虚拟表中,然后使用执行sql任务将该列转换回datetime2。@Akshay:更新了我的答案这不是一种有效的方法。此外,如果您的日期格式为示例
5/7/2013 16:42:27.490000
您是对的。它从来就不是为刺激型的工作而设计的。如果我在其中添加一些约束条件,它不会失败,但您的解决方案无疑会更好。