2014-12-18 2 views
0

Когда я запускаю этот SQL-запрос в SSMS (все версии 2005-2014), в столбце Child в конечной секции выбора содержатся данные, в которых отсутствуют последние CHAR (13) и CHAR (10). Есть ли способ иметь OPENXML или предложение WITH, чтобы не усекать эти символы?OPENXML Drops Trailing CHAR (13) + CHAR (10)

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()' 
    ) 
+0

CR/LF - пробелы в XML. Ищите способ сохранить пробелы. –

+0

Спасибо @ John: Вы предлагаете, что мой единственный выход здесь - использовать некоторые другие маркеры для chr (13) и chr (10) и заменить строку? – sisdog

+0

Спасибо, Джон, ты прав, XQuery был правильным путем - это сработало! Если вы переведете свой комментарий до ответа, я буду заполнять вашу статистику! Еще раз спасибо. – sisdog

ответ

1

Я не вижу способа получить OPENXML для этого.

Почему бы просто не использовать XQuery, поскольку у вас уже есть данные в столбце XML? CR + LF присутствуют в столбце XML. Уничтожает их только OPENXML.

Смежные вопросы