我正在尝试使用以下代码更新表中的项目:
UPDATE My_Table SET My_Xml = CONVERT(XML, '<xml>MY_SUPER_LONG_XML_STRING</xml>') WHERE id = '001';
我拥有的 XML 字符串大约有 100 行长。我知道这种方式CONVERT()
将删除所有回车和换行符。因此,如果我将 STYLE 设置CONVERT()
为“1”,这将保留所有空白。下面的代码非常适合我:
UPDATE My_Table SET My_Xml = CONVERT(XML, '<xml>MY_SUPER_LONG_XML_STRING</xml>', 1) WHERE id = '001';
问题是这将通过其他一些系统,我必须使用 ascii 字符来替换回车符和换行符,所以我将其更改为:
UPDATE My_Table SET My_Xml = CONVERT(XML,
'<xml>'+Char(13)+Char(10)+
'MY_SUPER_LONG_XML_STRING_LINE1'+Char(13)+Char(10)+
'MY_SUPER_LONG_XML_STRING_LINE2'+Char(13)+Char(10)+
...
'</xml>') WHERE id = '001';
这仅适用于 XML 输入字符串大约 30 行长的情况。当我使用原始字符串时,出现错误:
Msg 9400, Level 16, State 1, Line 5
XML parsing: line 28, character 126, unexpected end of input
这似乎输入字符串被切断了。我的意思是几百行 xml 仍然不长,因为 sql 中 xml 的限制是 2 GB。我将 STYLE 标志设置为 1 的方式也适用于任何长度的 xml。所以理想情况下用 Char(13)+Char(10) 替换 "\r\n" 应该也可以,对吧?知道为什么会这样吗?
更新:刚刚发现问题所在。sql server 中的字符串连接似乎有限制。仍然不确定如何解决它