Я использую общую систему для отчетности, которая берет данные из представления базы данных (SQL Server 2005). В этом представлении мне пришлось объединить данные из отношений «один ко многим» в одной строке и использовать решение, описанное priyanka.sarkar в этой теме: Combine multiple results in a subquery into a single comma-separated value. Решение использует SQLXML для объединения данных (подзапрос):SQLXML без кодирования XML?
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 -I не хотел XML-данных, я просто использовал это как трюк, и из-за общей системы я не могу ее кодировать, чтобы очистить его, чтобы закодированные данные попадали прямо в отчет. Я не могу использовать хранимые процедуры с общей системой, поэтому CURSOR-merging или COALESCE-ing здесь не вариант ...
Так что я ищу способ в T-SQL, который позволяет мне декодировать XML снова или даже лучше: избегает кодирования SQLXML. Очевидно, что я мог бы написать хранимую функцию, которая делает это, но я бы предпочел встроенный, более безопасный способ ...
Спасибо за вашу помощь ...
Спасибо, я упрощена до "(SELECT ... FOR XML PATH (''), ТИП) .value ('', 'NVARCHAR (макс).)" – Koen
+1 Я был в замешательстве с помощью креста apply и root options, поэтому я добавил комментарий Koen в качестве ответа. – dotjoe