XML 列を含む SQL Server 2008 データベースのデータ テーブルに行を挿入するスクリプトを作成しています。挿入される XML は連結された文字列の形式であるため、insert ステートメントは次のようになります。
insert into mytable (id, xmldata) values (100, '<DATA>...<VALUE>' +
@varcharvariable + '</VALUE>...</DATA>');
(1 row(s) affected)
XML データの長さは、挿入される行に応じて 1000 ~ 9000 文字です。これは通常は正常に機能しますが、XML ではなく xmldata に null が挿入されることがあります。SSMS は、挿入中に発生したエラーを表示せず、XML データをサイレントに null に置き換えます。戻ってこの値を手動で更新しようとすると、同じことが起こります。
update mytable set xmldata = '<DATA>...<VALUE>' + @varcharvariable +
'</VALUE>...</DATA>' where id = 100;
(1 row(s) affected)
しかし、データ テーブル xmldata でその行を表示すると、まだ null として返されます。さらに混乱を招くことに、この問題は一部のデータベースでは発生しませんが、まったく同じクエリを使用すると、同じ行に対して他のデータベースでは発生します。
ある時点で、これはメモリの問題に関連している可能性があります (ページが見つからないため、詳細を覚えていません)。Web ページでは、CAST('' as VARCHAR(MAX)) を XML の先頭に追加すると、クエリを意図したとおりに実行するために十分なメモリが割り当てられることが保証されます。これは実際にはしばらくの間うまくいきましたが、今日私は再び問題に遭遇し、これを追加するだけでは十分ではありませんでした. これは、更新されたクエリの例です。
update mytable set xmldata = CAST('' as VARCHAR(MAX)) +
'<DATA>...<VALUE>' + @varcharvariable + '</VALUE>...</DATA>'
where id = 100;
この更新が黙って失敗する原因や、この問題を修正する方法を知っている人はいますか?