Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在存储过程中使用FOR XML返回父级和子级数据_Sql Server_Sql Server 2000_For Xml - Fatal编程技术网

Sql server 在存储过程中使用FOR XML返回父级和子级数据

Sql server 在存储过程中使用FOR XML返回父级和子级数据,sql-server,sql-server-2000,for-xml,Sql Server,Sql Server 2000,For Xml,如果有一个父表和一个子表,其中可以有一个父表和多个子表,那么如何从存储过程中的存储过程返回以下xml <Parents> <Parent> <ID>Integer</ID> <Children> <Child> <ID>Integer</ID> <Text>String&l

如果有一个父表和一个子表,其中可以有一个父表和多个子表,那么如何从存储过程中的存储过程返回以下xml

<Parents>
    <Parent>
       <ID>Integer</ID>
       <Children>
           <Child>
               <ID>Integer</ID>
               <Text>String</Text>
           </Child>
           <Child>
               <ID>Integer</ID>
               <Text>String</Text>
           </Child>
        </Children>
    </Parent>
    <Parent>
       <ID>Integer</ID>
       <Children>
           <Child>
               <ID>Integer</ID>
               <Text>String</Text>
           </Child>
           <Child>
               <ID>Integer</ID>
               <Text>String</Text>
           </Child>
        </Children>
    </Parent>
</Parents>

整数
整数
一串
整数
一串
整数
整数
一串
整数
一串

您可以使用一些嵌套选择来完成

select 'a' as "ID",
 (
 select child as "ID"
 from ( select 'integer' as child
   union all
   select 'string' ) a
   for xml path('Child'), type, root('Childrens') 
   ) as "*"
for xml path('Parent'), type, root('Parents')

哎呀,我没有看到它是针对Sql-Server-2000的。

对于Sql 2000来说,这肯定要困难得多。下面是一个示例查询,可以帮助您开始此过程。请理解,它的格式并不完全符合您的要求。查询的目的是帮助您开始。。。朝正确的方向轻推

这里的诀窍是使用XML显式,并仔细设计列别名以控制元素的位置

Declare @Parent Table(Id Int, Data VarChar(20))
Insert Into @Parent Values(1, 'Fruit')
Insert Into @Parent Values(2, 'Vegetable')

Declare @Child Table(Id Int, ParentId Int, Name VarChar(20))
Insert Into @Child Values(1, 1, 'Apple')
Insert Into @Child Values(2, 1, 'Banana')
Insert Into @Child Values(3, 2, 'Carrot')
Insert Into @Child Values(4, 2, 'Pea')

Select 1 As Tag,
       NULL As Parent,
       Id As [Parent!1!Id!Element],
       Data As [Parent!1!Data!Element],
       NULL As [Child!2!Id!Element],
       NULL As [Child!2!Name!Element]
From   @Parent P

Union

Select  2 As Tag,
        1 As Parent,
        P.Id,
        NULL,
        C.Id,
        Name
From    @Child C
        Inner Join @Parent P
          On C.ParentId = P.Id
Order By [Parent!1!Id!Element]
For XML Explicit

没有机会升级到SQL Server 2005或2008??在以后的版本中,XML的一切都变得简单多了……老实说,在SQL Server 2000中,我只需要将行选择到C中,然后在那里处理所有精细的XML操作。SQLServer2000中的XML一点也不有趣,凌乱、复杂而且容易出错。省省麻烦吧!这也是我的解决方案——但在SQL Server 2000上不起作用,唉-((SQLServer2000)+(XML)=哎哟!;-o