Я использовал эту технику для определенного веб-приложения. У меня смешанные чувства по поводу этого подхода.
Одним из преимуществ является то, что это действительно удобно для простых требований. Другим преимуществом является то, что действительно легко преобразовать изменение схемы базы данных в изменение формата XML, поскольку все в одном месте.
Я обнаружил, что есть и минусы. Когда ваш целевой XML становится более сложным, имеет больше вложенных структур, тогда это решение может быстро выйти из-под контроля. Рассмотрим для примера это (взято из http://msdn.microsoft.com/en-us/library/ms345137(SQL.90).aspx#forxml2k5_topic5):
SELECT CustomerID as "CustomerID",
(SELECT OrderID as "OrderID"
FROM Orders "Order"
WHERE "Order".CustomerID = Customer.CustomerID
FOR XML AUTO, TYPE),
(SELECT DISTINCT LastName as "LastName"
FROM Employees Employee
JOIN Orders "Order" ON "Order".EmployeeID = Employee.EmployeeID
WHERE Customer.CustomerID = "Order".CustomerID
FOR XML AUTO, TYPE)
FROM Customers Customer
FOR XML AUTO, TYPE
По сути, вы видите, что начинаете писать SQL, чтобы отразить структуру вывода XML. И если вы думаете об этом, это плохо - вы смешиваете логику поиска данных с логикой представления - тот факт, что представление в этом случае представление в формате обмена данными, на самом деле не изменить тот факт, что вы смешиваете две разные вещи, делая их обе сложнее.
Например, вполне возможно, что требования к точной структуре XML изменяются со временем, тогда как фактические требования к связанным данным остаются неизменными. Тогда вы будете переписывать запросы, даже если в том наборе данных, который вы уже получаете, нет ничего плохого. Это кодовый запах, если вы спросите меня.
Еще одним соображением является настройка производительности / запросов. Я не могу сказать, что провел много сравнительных тестов для этих типов запросов, но я обычно избегал бы подобных подзапросов, как только смогу ... и теперь, просто из-за этого синтаксического сахара, я бы внезапно выбросил это из-за удобства генерировать XML без посредников? Я не думаю, что это хорошая идея.
Короче говоря, я бы использовал эту технику, если бы мог значительно упростить вещи. Но если бы я мог ожидать, что мне все равно понадобится язык-посредник для генерации всех необходимых мне XML-структур, я бы решил вообще не использовать эту технику. Если вы собираетесь генерировать XML, делайте все это в одном месте, не кладите некоторые в запрос, а некоторые в вашу программу, потому что это станет кошмаром для управления изменениями и их обслуживания.