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