SQL Server转换为XML再转回时丢失回车符问题咨询
SQL Server中XML转换丢失\r\n的问题及控制选项
当将包含完整换行符\r\n(即char(13)+char(10))的nvarchar字符串转换为XML类型,再转换回nvarchar时,原字符串中的\r会被丢弃,仅保留\n。
这是因为XML 1.0规范明确要求:所有换行符必须标准化,\r\n或单独的\r都会被统一转换为单个\n。SQL Server的XML类型严格遵循这一标准,不存在服务器或连接层面的配置选项可以改变这一默认行为。
如果需要保留原有的\r\n换行符,可在转换回字符串后手动将\n替换回\r\n,示例代码如下:
declare @ln nvarchar(2) = char(13)+char(10) declare @str nvarchar(max) = '<x>qwe '+@ln+' asd</x>' print @str print charindex(@ln, @str) -- 输出: 8 -- 转换为xml declare @xml xml = convert(xml, @str) -- 转换回字符串后恢复\r\n set @str = replace(convert(nvarchar(max), @xml), char(10), @ln) print @str print charindex(@ln, @str) -- 输出: 8 print charindex(char(13), @str) -- 输出: 8 print charindex(char(10), @str) -- 输出: 9
内容的提问来源于stack exchange,提问作者mshakurov
相关产品推荐
相关产品推荐

