我在一个包含其他空间类型的表中有一个文本字段。作为SSIS包的一部分,我使用此文本字段在同一个表上运行更新(作为SQL任务)并更新几何和地理列。我昨天能够成功运行以下查询
UPDATE Location
SET [Geometry] = geometry::STGeomFromText(ShapeText, 4326).MakeValid()
FROM Location
WHERE ShapeText IS NOT NULL
但是,今天它一直抛出以下异常:
Msg 6522,Level 16,State 1,Line 10发生了.NET Framework错误 在执行用户定义的例程或聚合“几何”期间: System.FormatException:24141:数字预计位于65536 输入。
当我看着形状时,它绝对是一个有效的形状。所以问题不在于形状,而是SQL只从列中读取多达65536个字符。当shapetext小于65536个字符时,它可以工作。
如果有人帮我这个并且让我知道如何从文本字段中读取超过65536个字符,那将会很棒。
答案 0 :(得分:0)
所以,最后我找到了问题和解决方案。即使问题看起来有点太离散,我希望它能帮助别人。
问题:我开始搜索这个65536个字符的错误消息,它引导我访问提到SQL内存问题的博客。然后我检查了我的SQL日志,它确实有错误消息报告:
无法保留Size = 65536的连续内存
令人困惑的是,它工作了一天,然后第二天,它开始向我发送错误消息,所以我肯定在某处进行了记忆进食操作。经过仔细检查,我发现我的SSIS包上有一个派生列,它是所有内存问题的根源。派生列检查文本字段的长度,如果长度为零,则将其设置为null。
解决方案:我删除了派生列操作,并将其替换为SQL任务,而且它的工作再次漂亮。