XML을 구문 분석 할 때 SQL Server가 \r
자를 제거하는 것처럼 보입니다. 그래서 내 저장 프로 시저가 절약을 위해 XML 값을받을 때, 모든 줄 바꿈은 \n
대신 \r\n.
OPENXML을 사용하여 캐리지 리턴 기호가 제거되었습니다.
\r
문자를 제거하지 않도록 내가 SQL 서버를 강제 할 수있는 방법이 있나요로 표시됩니다? 아래 샘플에서 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 nodes를 사용하도록 제안. 그러나 이것은 도움이되지 않습니다. 나는 아래의 쿼리를 실행하고 동일한 결과를 얻었다.
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)
감사합니다. Mikael, 좋은 설명. –