Похоже, что SQL Server удаляет \r
символов при синтаксическом анализе XML.Поэтому, когда моя хранимая процедура получает значения в xml для сохранения, все разрывы строк представляются в виде \n
вместо \r\n.
Можно ли каким-либо образом заставить SQL Server не удалять символы \r
?В приведенном ниже примере Node1
значение не содержит \r
символов.
DECLARE @hDoc int
DECLARE @Xml nvarchar(MAX)
SET @Xml = N'<Root><Node1><![CDATA[' + nchar(13) + nchar(10) + N'Some ' + nchar(13) + nchar(10) + N' Value]]></Node1></Root>'
EXEC sp_xml_preparedocument @hDoc OUTPUT, @Xml
SELECT
Node1
,convert(varbinary(max),Node1) -- Contains 0A00 in the start instead of 0D0A,
,charindex(nchar(13),Node1)
FROM
OPENXML(@hDoc, N'/Root', 2) WITH (Node1 NVARCHAR(MAX))
EXEC sp_xml_removedocument @hDoc
Вывод:
@ PJB предложил использовать XQuery узлы вместо.Но это не помогает.Я попытался выполнить запрос ниже и получил тот же результат.
DECLARE @xml xml
SET @xml = convert(xml, N'<Root><Node1><![CDATA[' + nchar(13) + nchar(10) + N'Some ' + nchar(13) + nchar(10) + N' Value]]></Node1></Root>')
declare @Node1 nvarchar(30)
select @Node1 = node.value('.', 'nvarchar(30)')
from @xml.nodes('/Root/Node1') as doc(node)
SELECT
@Node1
,convert(varbinary(max),@Node1) -- Contains 0A00 in the start instead of 0D0A,
,charindex(nchar(13),@Node1)