Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL从文本列读取的字符数不超过65536个_Sql_Ssis_Sql Server 2008 R2 - Fatal编程技术网

SQL从文本列读取的字符数不超过65536个

SQL从文本列读取的字符数不超过65536个,sql,ssis,sql-server-2008-r2,Sql,Ssis,Sql Server 2008 R2,我在表中有一个文本字段和其他空间类型。作为SSIS包的一部分,我使用此文本字段在同一个表上运行更新(作为SQL任务),并更新几何体和地理列。昨天我成功地运行了以下查询 UPDATE Location SET [Geometry] = geometry::STGeomFromText(ShapeText, 4326).MakeValid() FROM Location WHERE ShapeText IS NOT NULL 但是,今天它抛出了以下例外: Msg 6522,级别16,状态1,第

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

UPDATE Location 
SET [Geometry] = geometry::STGeomFromText(ShapeText, 4326).MakeValid()
FROM Location 
WHERE ShapeText IS NOT NULL
但是,今天它抛出了以下例外:

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

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


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

因此,我终于找到了问题和解决方案。尽管这个问题看起来有点过于离散,但我希望它能帮助其他人

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

未能保留大小为65536的连续内存

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


解决方案:我删除了派生列操作,取而代之的是一个SQL任务,它再次运行得很好。

请参阅@RayToal:谢谢,但我仍然看到相同的例外情况无法将形状文本存储为varchar或nvarchar?它实际上是文本类型吗?它是一种文本类型,我很快将它更改为varchar(max)来测试它,并再次运行查询,但仍然是相同的异常。我使用的varchar(max)值超过64k。SQL Server本身没有问题。我怀疑问题在于StGeomFromText和MakeValid之间的交互。