Я использую общую систему отчетности, которая берет данные из представления базы данных (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
Это работает отлично (это даже не так тяжело по производительности), за исключением того, что мои данные теперь кодируются в XML (& => &
и т. Д.) С помощью SQLXML - в конце концов, мне не нужны данные XML, я просто использовал это как трюк - и потому что общей системы, я не могу обойти это, чтобы очистить его, чтобы закодированные данные попадали прямо в отчет. Я не могу использовать хранимые процедуры с общей системой, поэтому слияние CURSOR или COALESCE-ing здесь не вариант ...
Итак, я ищу способ в T-SQL, который позволяет мне снова декодировать XML, или даже лучше: избегает его кодирования SQLXML. Очевидно, я мог бы написать хранимую функцию, которая делает это, но я бы предпочел встроенный, более безопасный способ ...
Спасибо за вашу помощь...