Дополнительные символы при использовании XML PATH - PullRequest
11 голосов
/ 16 февраля 2012

У меня есть таблица с именем Map_Data, и данные выглядят так:

 ID    SoCol                                                              Descol  
 125   case Per_rating when 5 then 'Good' when 4 then 'Ok' else null end  D_Code

И я написал запрос по этой конкретной строке, и запрос:

SELECT  Params = ( SELECT   DesCol + ' = ''' + SoCol + ''''
                   FROM     dbo.Map_Data  t1
                   WHERE   ID = 125
                   FOR
                   XML PATH('')
                 )

и я получаю вывод как:

D_Code = 'case per_rating
 when 5 then 'Good'
 when 4
 then 'Ok'
 end'

Может кто-нибудь сказать мне, почему я получаю '
' это и как я могу это исправить?

Ответы [ 2 ]

15 голосов
/ 16 февраля 2012

Это небольшое изменение приведет к тому, что уродливые сущности исчезнут, но они не устранят возврат каретки (посмотрите результаты в тексте, а не в таблице, чтобы увидеть их):

SELECT  Params = ( SELECT   DesCol + ' = ''' + SoCol + ''''
                   FROM     dbo.Map_Data  t1
                   WHERE   ID = 125
                   FOR
                   XML PATH(''), TYPE
                 ).value('.[1]', 'nvarchar(max)');

Если вы тоже хотите избавиться от CR / LF, вы можете сказать:

SELECT  Params = ( SELECT   REPLACE(REPLACE(DesCol + ' = ''' + SoCol + '''', 
     CHAR(13), ''), CHAR(10), '')
                   FROM     dbo.Map_Data  t1
                   WHERE   ID = 125
                   FOR
                   XML PATH(''), TYPE
                 ).value('.[1]', 'nvarchar(max)');

Также я не уверен, как вы собираетесь использовать выходные данные, но если вы собираетесь оценивать их позже с помощью динамического SQL, вам нужно заменить встроенные одинарные кавычки (') на два одинарные кавычки (''). В противном случае он взорвется, потому что они также являются разделителями строк.

0 голосов
/ 01 апреля 2016

Этого также можно добиться, просто поместив весь код в одинарную кавычку в одну строку.У меня тоже была похожая проблема, и она решена путем хранения всего кода в одной строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...