2010-10-27 66 views
2

我正在尝试使用SQL Server导入数据函数加载文件 - 将行附加到现有表。在SSIS数据加载中使用SQL Server空间类型

我现有的表创建这样的:

CREATE TABLE [dbo].[load](
    [Long] [varchar](50) NULL, 
    [Lat] [varchar](50) NULL, 
    [Geog] AS ([geography]::STGeomFromText(((('POINT('+[Long])+' ')+[Lat])+')',(4326))) 
) 

然而,当负载试图执行我看到下面的错误消息。我相信这个问题出现在计算列'Geog'的附近,因为当我从表格定义中取出数据时,数据会正常加载。

错误为0xC0202009:数据流任务1: SSIS错误代码DTS_E_OLEDBERROR。发生了OLE DB错误 。错误代码: 0x80004005。一个OLE DB记录是 可用。资料来源:“微软SQL服务器 本机客户端10.0” HRESULT: 0x80004005说明:“虽然从 主机读取当前行时, 过早一个最终的消息是 遇到 - 输入数据流 被中断,当服务器 预计会看到更多数据,主机 程序可能已终止,请确保 您使用的是受支持的客户端 应用程序编程接口 (API)。 (SQL Server导入和 导出向导)错误0xc0209029: 数据流任务1:SSIS错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 “输入‘目的地输入’(47)” 失败,错误代码0xC020907B 发生,并在“输入‘目的地 输入错误行 处置’(47)”关于 错误指定失败。指定的 组件的指定对象 上发生错误。在此之前发布的消息可能有错误 以及有关失败的更多 信息。 (SQL Server导入和导出向导) 错误0xc0047022:数据流任务1: SSIS错误代码 DTS_E_PROCESSINPUTFAILED。 组件 上的ProcessInput方法在处理输入“目标 输入”(47)时,“目标 - load_school”(34) 失败,错误代码为0xC0209029 。标识的组件 从 ProcessInput方法返回错误。该错误是特定于组件的 ,但 错误是致命的,并且会导致数据 Flow任务停止运行。可能有 是在此 之前发布的错误消息,其中包含有关 失败的更多信息。 (SQL Server导入和 导出向导)

回答

2

所以这样看来,有不支持包含在定义的地理类型计算列(我想与其他类型包括点类型,它工作得很好) 。这可能是由于缺乏SSIS对空间数据类型的支持,或者由于SQL Server在批量插入期间处理计算列的方式。

无论哪种方式,我不得不为我的问题创建解决方案,并提出了以下解决方法。

在我的SSIS包中,我首先删除导致问题的计算列。 然后我运行数据加载过程 然后,我使用ALTER语句重新添加计算列到表中。

虽然在运行时场景中可能会导致脱机数据的某些问题,但这对于目前的工作状况良好。然而,它应该足够简单来解决这个问题。

这确实意味着我不得不创建一个更复杂的SSIS包,而不仅仅是使用SQL Server提供的简单“导入数据”向导,而且我仍然感到有点沮丧,我不知道我的问题的实际原因。我只是找到了一种解决方法并继续前进。如果有人能指出为什么我看到这个失败,我仍然会很感激。

+0

谢谢!我一直在为此挣扎大约2天! – bporter 2012-08-16 14:23:38