我有一个名为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'
任何人都可以告诉我为什么我会得到'
'
它,我该如何纠正呢?
答案 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)
您也可以通过将单引号中的所有代码保存在一行中来实现此目的。我也有类似的问题,通过将所有代码保持在一行来解决它。