我正在尝试使用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导入和 导出向导)
答案 0 :(得分:2)
所以似乎不支持在定义中包含包含地理类型的计算列(我尝试使用其他类型,包括POINT类型,并且它工作正常)。这可能是由于SSIS对空间数据类型缺乏支持,或者缺乏对SQL Server在批量插入期间处理计算列的方式的支持。
无论哪种方式,我都必须为我的问题创建解决方案并提出以下解决方法。
在我的SSIS包中,我首先删除导致问题的计算列。 然后我运行数据加载过程 然后我使用ALTER语句将计算列重新添加到表中。
暂时可以正常工作,但在运行时方案中可能会导致脱机数据出现问题。但是,解决这个问题应该很简单。
这确实意味着我必须创建一个更复杂的SSIS包,而不仅仅是使用SQL Server提供的简单“导入数据”向导,我仍然感到有些沮丧,我不知道我的问题的实际原因。我刚刚找到了一种方法来解决它并继续前进。如果有人能指出我为什么会看到这种失败,我仍然会感激。