我正在编写一个脚本来将行插入到包含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个字符之间,具体取决于要插入的行。这通常可以正常工作,但偶尔会将null插入xmldata而不是XML。 SSMS没有显示插入过程中发生的任何错误,它只是默默地用null替换XML数据。如果我尝试返回并手动更新此值,则会发生同样的事情:
update mytable set xmldata = '<DATA>...<VALUE>' + @varcharvariable +
'</VALUE>...</DATA>' where id = 100;
(1 row(s) affected)
但是当在数据表中查看该行时,xmldata仍然返回null。为了进一步增加我的困惑,这个问题在某些数据库上不会发生,但在使用完全相同的查询时会在其他数据库上发生同样的行。
在某些时候我读到这可能与内存问题有关(我找不到页面了,所以我不记得具体内容)。提到将CAST(''作为VARCHAR(MAX))预先添加到XML的网页将确保为查询分配足够的内存以按预期运行。这实际上工作了一段时间,但今天我又遇到了这个问题并且添加这个还不够。这将是更新的查询的示例:
update mytable set xmldata = CAST('' as VARCHAR(MAX)) +
'<DATA>...<VALUE>' + @varcharvariable + '</VALUE>...</DATA>'
where id = 100;
有谁知道是什么原因导致此更新无声地失败或我如何解决此问题?