Дополнительные символы при использовании XML PATH

У меня есть таблица с именем 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'

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

Ответ 1

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

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, вам понадобится заменить встроенные одинарные кавычки (') двумя одинарные кавычки (''). В противном случае он взорвется, потому что они также являются строковыми разделителями.

Ответ 2

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