Не могу сказать, почему ваш код не работает.Вот пример, который работает.Вы можете применить то, что я делаю, к вашему делу и выяснить разницу.
Функция, возвращающая xml
create function [dbo].[XMLFunc]() returns xml
as
begin
return '<root><item>1</item><item>2</item></root>'
end
Запрос с использованием XMLFunc
declare @TestTable table (id int)
insert into @TestTable values (1)
insert into @TestTable values (2)
select
tt.id,
[dbo].[XMLFunc]()
from @TestTable as tt
for xml path('things')
Результирующий xml
<things>
<id>1</id>
<root>
<item>1</item>
<item>2</item>
</root>
</things>
<things>
<id>2</id>
<root>
<item>1</item>
<item>2</item>
</root>
</things>