https://blog.csdn.net/qq_33556442/article/details/82147925

创建两张带有数据的表

  1. CREATE TABLE Persons
  2. (
  3. Guid uniqueidentifier not null,
  4. Name varchar(255) not null,
  5. )

SqlServer-STUFF拼接字符串(转义字符) - 图1

  1. insert into Persons(Guid,Name)values(NEWID(),'小绿')
  2. insert into Persons(Guid,Name)values(NEWID(),'小红')
  3. insert into Persons(Guid,Name)values(NEWID(),'小蓝')
  4. insert into Persons(Guid,Name)values(NEWID(),'小黄')
  5. insert into Persons(Guid,Name)values(NEWID(),'小黑')
  6. insert into Persons(Guid,Name)values(NEWID(),'小白')
  7. select * from Persons

SqlServer-STUFF拼接字符串(转义字符) - 图2
拼接前面**4**笔数据的名称
通常使用FOR XML PATH对返回JSON字符串的拼接

  1. SELECT TOP 4 ',' + Name FROM Persons FOR XML PATH ('')

SqlServer-STUFF拼接字符串(转义字符) - 图3
利用STUFF将上述利用FOR XML PATH生成的字符串中的前置逗号去掉
SqlServer-STUFF拼接字符串(转义字符) - 图4
特殊拼接字符—实现返回结果:小绿->小红->小红->小黄
按照刚刚上面的写法得不到相应结果,如下图所示
SqlServer-STUFF拼接字符串(转义字符) - 图5
这个时候我们可以使用替换(PS:长度是拼接字符串的长度),如下:
SqlServer-STUFF拼接字符串(转义字符) - 图6
或者可以不使用替换,用以下的写法
SqlServer-STUFF拼接字符串(转义字符) - 图7
还有一种情况就是数据库里面存在转义字符

  1. insert into Persons(Guid,Name)values(NEWID(),'<span>2</span>')
  2. insert into Persons(Guid,Name)values(NEWID(),'2</br>')
  3. SELECT NAME FROM Persons

SqlServer-STUFF拼接字符串(转义字符) - 图8
拼接字符串看看得到什么,这个时候就发现数据库的字符都被转义了
SqlServer-STUFF拼接字符串(转义字符) - 图9
这个时候可以使用这种写法得到结果

  1. SELECT Name = STUFF((
  2. SELECT ','+NAME FROM Persons FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)')
  3. ,1,1,'')

SqlServer-STUFF拼接字符串(转义字符) - 图10