在SSIS数据加载中使用SQL Server空间类型

时间:2010-10-27 09:55:14

标签: sql-server ssis geospatial calculated-columns

我正在尝试使用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记录是   可用。资料来源:“Microsoft SQL   Server Native Client 10.0“Hresult:   0x80004005描述:“虽然   从主机读取当前行,a   过早的消息结束了   遇到 - 传入的数据流   当服务器中断时   预计会看到更多数据。主人   程序可能已经终止。确保   您正在使用受支持的客户端   应用程序接口   (API)。“。(SQL Server Import and   导出向导)错误0xc0209029:   数据流任务1:SSIS错误代码   DTS_E_INDUCEDTRANSFORMFAILUREONERROR。   “输入”目的地输入“(47)”   失败,因为错误代码0xC020907B   发生了,错误行   对“输入”目的地的处理   输入“(47)”指定失败   错误。发生错误   指定的指定对象   零件。可能有错误   之前发布的消息有更多   有关失败的信息。 (SQL   服务器导入和导出向导)   错误0xc0047022:数据流任务1:   SSIS错误代码   DTS_E_PROCESSINPUTFAILED。该   组件上的ProcessInput方法   “目的地 - load_school”(34)   失败,错误代码为0xC0209029   处理输入“目的地   输入“(47)。已识别的组件   从...返回错误   ProcessInput方法。错误是   特定于组件,但是   错误是致命的,将导致数据   Flow任务停止运行。也许有   是在此之前发布的错误消息   有关的更多信息   失败。 (SQL Server导入和   导出向导)

1 个答案:

答案 0 :(得分:2)

所以似乎不支持在定义中包含包含地理类型的计算列(我尝试使用其他类型,包括POINT类型,并且它工作正常)。这可能是由于SSIS对空间数据类型缺乏支持,或者缺乏对SQL Server在批量插入期间处理计算列的方式的支持。

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

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

暂时可以正常工作,但在运行时方案中可能会导致脱机数据出现问题。但是,解决这个问题应该很简单。

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