Sql server 从SQL Server多表查询创建单个XML
我想从SQLServer2005查询多个表,创建一个XML文档,并在存储过程中执行此操作 我知道我可以在一个存储过程中查询多个表,并在.NET应用程序中获得一个可以轻松保存为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.
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 登记
如果我想让它们按相同的顺序排列,该怎么办?