OPENXML丢弃尾随CHAR(13)+ CHAR(10)

时间:2014-12-18 00:17:40

标签: sql-server xml sql-server-openxml

当我在SSMS(所有版本2005-2014)中运行此SQL时,最终的select语句的Child列包含缺少最终CHAR(13)和CHAR(10)的数据。有没有办法让OPENXML或它的WITH子句指定不截断这些字符?

DECLARE @IDoc INT
DECLARE @SerializedEntity XML

CREATE TABLE #BadResultTable(doc XML)

INSERT INTO #BadResultTable(doc)
    SELECT NewXML=
     (SELECT Child='Please dont strip my carriage return' + CHAR(13) + CHAR(10)
      FOR XML PATH('Parent'), TYPE, ELEMENTS XSINIL)

SET @SerializedEntity = (SELECT doc FROM #BadResultTable FOR XML PATH('Parent'), TYPE, ELEMENTS XSINIL)

EXEC sp_xml_preparedocument @IDoc OUTPUT, @SerializedEntity

/*PROBLEM HERE: The Child column is missing the training CHAR(13) and CHAR(10)*/
SELECT Child,ASCII(SUBSTRING(Child, LEN(Child), 1))
        FROM OPENXML(@IDoc, '/Parent', 2)
        WITH (Child NVARCHAR(MAX) '//Child/text()'
    )

1 个答案:

答案 0 :(得分:1)

我没有看到让OPENXML这样做的方法。

为什么不使用XQuery,因为您已经在XML列中获得了数据? CR + LF存在于XML列中。它只是破坏它们的OPENXML。