0

我在具有其他空间类型的表中有一个文本字段。作为 SSIS 包的一部分,我使用此文本字段在同一个表上运行更新(作为 SQL 任务)并更新几何和地理列。我昨天能够成功运行以下查询

UPDATE Location 
SET [Geometry] = geometry::STGeomFromText(ShapeText, 4326).MakeValid()
FROM Location 
WHERE ShapeText IS NOT NULL

但是,今天它一直在抛出以下异常:

消息 6522,级别 16,状态 1,第 10 行在执行用户定义的例程或聚合“几何”期间发生 .NET Framework 错误:System.FormatException:24141:输入的位置 65536 处应有一个数字。

当我查看形状时,它绝对是一个有效的形状。所以问题不在于形状,而在于 SQL 最多只能从列中读取 65536 个字符。当 shapetext 少于 65536 个字符时,它可以工作。

如果有人能帮我解决这个问题并让我知道如何从文本字段中读取超过 65536 个字符,那就太好了。

4

1 回答 1

1

所以,最后我找到了问题和解决方案。即使这个问题看起来有点过于离散,我希望它可以帮助别人。

问题:我开始搜索这个 65536 字符的错误消息,它引导我找到提到 SQL 内存问题的博客。然后我检查了我的 SQL 日志,它确实报告了错误消息:

未能保留 Size= 65536 的连续内存

令人困惑的是,它一天工作,然后第二天,它开始向我抛出错误消息,所以我肯定在某个地方进行了内存消耗操作。经过仔细检查,我发现我的 SSIS 包中有一个派生列,它是所有内存问题的根源。派生列正在检查文本字段的长度,如果长度为零,则将其设置为 null。

解决方案:我删除了派生列操作并将其替换为 SQL 任务,它再次运行良好。

于 2012-07-26T00:52:24.617 回答