0

他の空間タイプを含むテーブルにテキスト フィールドがあります。SSIS パッケージの一部として、このテキスト フィールドを使用して、同じテーブルに対して (SQL タスクとして) 更新を実行し、geometry 列と geography 列を更新しています。昨日、次のクエリを正常に実行できました

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 文字しか読み取っていないことです。また、シェイプテキストが 65536 文字未満の場合に機能します。

誰かがこれを手伝ってくれて、テキスト フィールドから 65536 文字を超える文字を読み取る方法を教えてくれたらうれしいです。

4

1 に答える 1

1

それで、ついに問題とその解決策を見つけました。問題が少し離散的すぎるように見えますが、他の人の助けになることを願っています.

問題: この 65536 文字のエラー メッセージを検索し始めたところ、SQL メモリの問題について言及しているブログにたどり着きました。次に、SQL ログを確認したところ、次のようなエラー メッセージが報告されていました。

Size= 65536 の連続したメモリを予約できませんでした

混乱したのは、ある日は機能していたのに、翌日にはエラー メッセージが表示され始めたということでした。注意深く調べたところ、すべてのメモリの問題の原因となっている派生列が SSIS パッケージにあることがわかりました。派生列がテキスト フィールドの長さをチェックし、長さがゼロの場合は null に設定していました。

解決策: 派生列操作を削除し、代わりに SQL タスクに置き換えたところ、再び美しく機能しました。

于 2012-07-26T00:52:24.617 に答える