SQL Server版本的MySQL的group_concat和转义字符串

时间:2010-04-08 02:01:00

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

我只有MS SQL Server 2008和Visual Studio的Express版本。鉴于我无法创建SQL Server项目,因此CLR解决方案是不可能的,我试图使用

select col1, stuff( ( select ' ' + col2
from StrConcat t1
where t2.col1 = t1.col1
for xml path('')
),1,1,'')
from StrConcat t2
group by col1
order by col1

获取一行连接col2。 col2是一个varchar字段,包含一些控制字符,如& \ n 。当它与上面的SQL连接时,它似乎逃脱了那些控制字符,即。 & 成为  &安培;放大器并且 \ n 变成& #xOD,这不是我想要它做的。鉴于col1和连接字段将用于更新另一个表,在未转义的原始表单中获取连接字段的最佳方法是什么,或者没有,唯一的方法是使用外部代码?

表架构如下所示: StrConcat(id int主键,col1 int,txt varchar(80)) col1上有一个索引,txt应按col1分组,按组中的id排序。

1 个答案:

答案 0 :(得分:1)

行为当然是by design。如果没有以这种方式转义,查询可能会输出无效的XML。

如果你需要在SQL Server中获得未转义的值,那么你将不得不使用other concatenation methods之一(递归CTE通常是CLR聚合和FOR XML之后效率最高的,但最难写的。)

当然,如果将它直接传递给应用程序,那么在那里使用它会更容易,即在.NET中使用XmlReader类。