2012-07-10 42 views
0

我在具有其他空間類型的表中有一個文本字段。作爲SSIS包的一部分,我使用此文本字段在同一張表上運行更新(作爲SQL任務)並更新幾何和地理列。我能夠成功運行下面的查詢昨天SQL不能從文本列中讀取超過65536個字符

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個字符,那將會很棒。

+0

請參閱http://stackoverflow.com/questions/3008267/ms-sql-server-text-datatype-maxlength-65-535 – 2012-07-10 05:24:13

+0

@RayToal:謝謝,但我仍然看到相同的異常 – Divi 2012-07-10 05:32:27

+0

無法存儲形狀文本作爲varchar或nvarchar?它實際上是文本類型嗎? – 2012-07-10 05:36:26

回答

0

因此,最後我找到了問題和解決方案。儘管問題看起來有些過於離散,但我希望它能幫助別人。

問題:我開始搜索這個65536個字符的錯誤信息,它讓我知道提到SQL內存問題的博客。然後我檢查我的SQL日誌,它確實有錯誤消息報告:

無法保留大小的連續內存= 65536

的困惑是,它是工作一天,然後第二天,它開始向我拋出錯誤信息,所以我絕對在某個地方進行了內存吃飯操作。仔細檢查後,我發現我的SSIS軟件包中有一個派生列,這是所有內存問題的根源。派生列正在檢查文本字段的長度,如果長度爲零,則將其設置爲null。

解決方案:我刪除了派生列操作,並用一個SQL任務取而代之,並且它的工作再次美妙。

相關問題