Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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 从SQL Server多表查询创建单个XML_Sql Server_Xml - Fatal编程技术网

Sql server 从SQL Server多表查询创建单个XML

Sql server 从SQL Server多表查询创建单个XML,sql-server,xml,Sql Server,Xml,我想从SQLServer2005查询多个表,创建一个XML文档,并在存储过程中执行此操作 我知道我可以在一个存储过程中查询多个表,并在.NET应用程序中获得一个可以轻松保存为XML的DataSet。但是,我正在尝试在存储过程的上下文中执行类似的操作 基本上我想做这样的事情: declare @x xml select @x = x.result from (select y.* from tabley y for xml path('y') union select a.

我想从SQLServer2005查询多个表,创建一个XML文档,并在存储过程中执行此操作

我知道我可以在一个存储过程中查询多个表,并在.NET应用程序中获得一个可以轻松保存为XML的
DataSet
。但是,我正在尝试在存储过程的上下文中执行类似的操作

基本上我想做这样的事情:

declare @x xml
select @x = x.result
from (select y.* from tabley y for xml path('y')
      union
      select a.* from tablea a for xml path('aa')
     ) as x
select @x
SELECT
    (SELECT y.* FROM dbo.TableY FOR XML PATH('y'), TYPE) AS 'YElements',
    (SELECT a.* FROM dbo.TableA FOR XML PATH('aa'), TYPE) AS 'AElements'
FOR XML PATH(''), ROOT('root')

如果您想要一个接一个的,您可以尝试以下方式:

declare @x xml
select @x = x.result
from (select y.* from tabley y for xml path('y')
      union
      select a.* from tablea a for xml path('aa')
     ) as x
select @x
SELECT
    (SELECT y.* FROM dbo.TableY FOR XML PATH('y'), TYPE) AS 'YElements',
    (SELECT a.* FROM dbo.TableA FOR XML PATH('aa'), TYPE) AS 'AElements'
FOR XML PATH(''), ROOT('root')
返回类似以下内容的XML:

<root>
   <YElements>
     <Y>
       ....
     </Y>
     <Y>
       ....
     </Y>
      ......
   </YElements>
   <AElements>
     <A>
       ....
     </A>
     <A>
       ....
     </A>
      ......
   </AElements>
</root>

....
....
......
....
....
......

在sql server中转换表XML

Declare @RESULTXML XML
Declare @SMS_REGISTER TABLE([id] VARCHAR(30),[status] VARCHAR(30))
Declare @EMAIL_REGISTER TABLE([id] VARCHAR(30),[status] VARCHAR(30))
Declare @ODP_REGISTER TABLE([id] VARCHAR(30),[status] VARCHAR(30))

Select @RESULTXML =( 
SELECT (SELECT * FROM @SMS_REGISTER FOR XML PATH('sms'), TYPE) AS 'smss',
         (SELECT * FROM @EMAIL_REGISTER FOR XML PATH('email'), TYPE) AS         'emails',
         (SELECT * FROM @ODP_REGISTER FOR XML PATH('odp'), TYPE) AS 'odps'
    FOR XML PATH('subroot'), ROOT('root') )
像这样返回XML
<root> <subroot> <smss> <sms> <id>NT0000000020</id> <status>registered</status> </sms> <sms> <id>NT0000000021</id> <status>registered</status> </sms> <sms> <id>NT0000000022</id> <status>registered</status> </sms> <sms> <id>NT0000000023</id> <status>registered</status> </sms> </smss> <emails> <email> <id>NT0000000024</id> <status>registered</status> </email> <email> <id>NT0000000025</id> <status>registered</status> </email> </emails> </subroot> </root> 新台币0000000020 登记 NT0000000021 登记 NT0000000022 登记 NT0000000023 登记 NT0000000024 登记 新台币0000000025 登记

如果我想让它们按相同的顺序排列,该怎么办?