2011-01-26 1 views
1

Я хочу сделать что-то подобное в хранимой процедуре, где dbo.Ordex_Select_Things_as_Xml_Function - это функция, которая возвращает XML.пользовательская функция, которая управляет и возвращает XML из хранимой процедуры

Когда я запустил его, я получаю пустой корневой узел «вещей», например.(). Как вернуть XML из функции в качестве дочернего узла <thing>? Я использую SQL Server 2005.

create procedure dbo.Ordex_Select_Things_as_Xml(
@UserID uniqueidentifier 
,@ThingID uniqueidentifier = null 
,@Recursive bit = 1 
) 
as 
begin try 

--- Some other stuff here... 

select top 1 
    LastUpdated.LastUpdatedDate as '@lastUpdatedDate' 
    ,(
     dbo.Ordex_Select_Things_as_Xml_Function(@UserID, @ThingID, 1, 1) 
) 
from dbo.LastUpdated 
    order by LastUpdated.LastUpdatedDate desc 
     for xml path('things'), type 

--- Some other stuff here... 

end try 
+0

Почему вы хотите сделать XML из SQL Server? вы, вероятно, должны генерировать его снаружи. – ykatchou

+0

@ykatchou - в dbo.Ordex_Select_Things_as_Xml_Function происходит много рекурсии, поскольку строки имеют родительские дочерние отношения, поскольку я использую Microsoft C# .Net. Я бы предположил, что через Linq потребуется значительно больше времени. – gangelo

+0

Я не знаю точно enviromnent, но он может быть довольно тяжелым в базе данных ... так что это зависит от нагрузки базы данных и клиента – ykatchou

ответ

3

Не могу сказать, почему ваш код не работает. Вот пример, который работает. Вы можете применить то, что я делаю к вашему делу, и выяснить разницу.

Функция возвращения 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> 
+0

Спасибо. Теперь почему я не могу этого сделать; Я проверю это. – gangelo

+0

Функция 'dbo.Ordex_Select_Things_as_Xml_Function', вероятно, имеет некоторые ошибки. –