通过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
格式。
答案 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]
数据类型。
希望这有帮助。