我正在使用一个通用的报表系统,它从数据库视图(SQL Server 2005)中获取数据。在此视图中,我不得不在一行中合并来自一对多关系的数据,并使用priyanka.sarkar在这个主题中描述的解决方案:将子查询中的多个结果组合成单个逗号分隔值。该解决方案使用SQLXML来合并数据(子查询):
SELECT STUFF(
( SELECT ', ' + Name
FROM MyTable _in
WHERE _in.ID = _out.ID
FOR XML PATH('')), -- Output multiple rows as one xml type value,
-- without xml tags
1, 2, '') -- STUFF: Replace the comma at the beginning with empty string
FROM MyTable _out
GROUP BY ID -- Removes duplicates
这个方法非常完美运行(性能也不会太重),除了我的数据现在被SQLXML编码成XML(& => &
,等等)。我并不想要XML数据,只是用这个作为一个技巧。由于通用系统的限制,我无法编写代码来清理它,因此编码数据直接进入报告。我不能使用存储过程来处理这个通用系统,因此无法进行CURSOR合并或COALESCE处理...
所以我正在寻找一种T-SQL方式来解码XML,或者更好的是避免SQLXML对其进行编码。显然,我可以编写一个存储函数来执行此操作,但我更喜欢内置且更安全的方式...
谢谢您的帮助...