SSIS到SQL Server的平面文件数据类型问题

时间:2014-10-22 20:26:45

标签: sql-server date ssis flat-file

通过SSIS将flatfile加载到SQL Server。我在SQL Server目标表中有几个具有DATE数据类型的列。在SSIS中连接管理器中定义的相应数据类型应该是什么?我尝试了连接管理器中可用的所有DATE数据类型,但它导致转换错误,如下所示:

  

[OLE DB Destination [199]]错误:SSIS错误代码DTS_E_OLEDBERROR。   发生OLE DB错误。错误代码:0x80004005。 OLE DB记录   是可用的。来源:" Microsoft SQL Server Native Client 11.0"   Hresult:0x80004005描述:"强制转换的字符值无效   规格"

     

[OLE DB Destination [199]]错误:OLE DB出错   Destination.Inputs [OLE DB目标输入] .Columns [创建于] on   OLE DB Destination.Inputs [OLE DB目标输入]。列状态   返回的是:"由于潜在的原因,无法转换该值   数据丢失。"。

     

[OLE DB Destination [199]]错误:SSIS错误代码   DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 " OLE DB   Destination.Inputs [OLE DB目的地输入]"失败,因为错误   代码0xC0209077发生,错误行处理" OLE DB   Destination.Inputs [OLE DB目的地输入]"指定失败   错误。指定的指定对象发生错误   零件。在此之前可能会发布错误消息   有关失败的信息。

flatfile源日期格式为DD-MM-YYYY格式。

1 个答案:

答案 0 :(得分:2)

复制自:http://www.sqlservercentral.com/Forums/Topic609337-148-1.aspx

由于您有DD-MM-YYYY格式,因此我需要将其翻转为YYYY-MM-DD,以使(DT_DATE)强制转换正常运行。我相应地改变了子串参数。

创建派生列转换,创建新列,并将其放在表达式字段中。显然,请使用您自己的字段名称。

(DT_DATE)(SUBSTRING([field],7,4) + "-" + SUBSTRING([field],4,2) + "-" + SUBSTRING([field],1,2))

就个人而言,我将派生列命名为CONV_[field],因此我知道它是转换后的字段以及我转换的字段。使用您喜欢的任何命名约定。

在目标映射中使用派生列。

更长的答案。

确保您的来源是[DT_STR]数据类型。

希望这有帮助。