在sql中使用convert()时,XML输入字符串被截断

在sql中使用convert()时,XML输入字符串被截断,sql,sql-server,xml,sql-convert,Sql,Sql Server,Xml,Sql Convert,我正在尝试使用以下代码更新表中的项目: UPDATE My_Table SET My_Xml = CONVERT(XML, '<xml>MY_SUPER_LONG_XML_STRING</xml>') WHERE id = '001'; 问题是这将通过其他系统,我必须使用ascii字符替换回车符和换行符,因此我将其更改为如下: UPDATE My_Table SET My_Xml = CONVERT(XML, '<xml>'+Char(13)+Char(

我正在尝试使用以下代码更新表中的项目:

UPDATE My_Table SET My_Xml = CONVERT(XML, '<xml>MY_SUPER_LONG_XML_STRING</xml>') 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'; 
好像输入字符串被切断了。我的意思是,考虑到sql中xml的限制是2GB,几百行xml仍然不长。我将样式标志设置为1的方式也适用于任何长度的xml。所以理想情况下,用Char(13)+Char(10)替换“\r\n”也可以,对吗?知道为什么会这样吗


更新:刚刚发现问题所在。sql server中的字符串连接似乎有一个限制。仍然不确定如何解决此问题

SQL Server在内部将XML数据类型存储为UTF-16二进制格式。它不是具有任意换行符和回车符的字符串

当XML在文件系统上持久化时,它可以是一个流,也可以是人眼看到的缩进。但在这两种情况下,它仍然是合法的XML

“…问题是这将通过其他系统,我必须使用ascii字符来替换回车符和换行符…”

我猜其他系统在处理XML时存在一些实际问题

我将按如下方式更改您的SQL:

DECLARE @xml XML = N'<xml>MY_SUPER_LONG_XML_STRING</xml>';

UPDATE My_Table 
SET My_Xml = @xml 
WHERE id = '001';
DECLARE@xml xml=N'MY_SUPER_LONG_xml_STRING';
更新我的表格
设置My_Xml=@Xml
其中id='001';

Hmm这不是我的主要问题。我确实发现了这个问题。这是字符串连接的极限。仍然不知道如何解决它您仍然在处理XML的格式化。。。XML的来源是什么?将
'+Char(13)+Char(10)
更改为
CAST(''AS VARCHAR(MAX))+Char(13)+Char(10)
,这样您连接的初始内容具有MAXdatatype@Martin史密斯:哈哈,是的,我也找到了答案。谢谢
Msg 9400, Level 16, State 1, Line 5
XML parsing: line 28, character 126, unexpected end of input
DECLARE @xml XML = N'<xml>MY_SUPER_LONG_XML_STRING</xml>';

UPDATE My_Table 
SET My_Xml = @xml 
WHERE id = '001';