使用XML PATH时的额外字符

时间:2012-02-16 16:07:36

标签: sql sql-server sql-server-2008 tsql

我有一个名为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 个答案:

答案 0 :(得分:15)

这个微小的变化将使丑陋的实体消失,但它们不会消除回车(查看结果到文本的结果,而不是结果到网格,看看它们):

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对其进行评估,则需要替换嵌入的单引号(')有两个单引号('')。否则它会爆炸,因为它们也是字符串分隔符。

答案 1 :(得分:0)

您也可以通过将单引号中的所有代码保存在一行中来实现此目的。我也有类似的问题,通过将所有代码保持在一行来解决它。