用户定义的函数,用于操作和从存储过程返回XML

时间:2011-01-26 15:51:30

标签: xml sql-server-2005 tsql recursion

我希望在存储过程中执行类似的操作,其中dbo.Ordex_Select_Things_as_Xml_Function是一个返回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

1 个答案:

答案 0 :(得分: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>