我正在尝试将查询转换为以正确格式返回xml
查询只是SELECT * FROM [TABLENAME]
,是的,它必须是*
,因为它用于需要在任何表上工作的动态实用程序。
无论如何,我希望结果记录能够嵌套两个级别,如此
<Root>
<RecordParent>
<Record>
<!--Fields selected with * end up here-->
</Record>
</RecordParent>
<RecordParent>
<Record>
<!--Fields selected with * end up here-->
</Record>
</RecordParent>
<RecordParent>
<Record>
<!--Fields selected with * end up here-->
</Record>
</RecordParent>
</Root>
但是我似乎无法获得这个xml,我所做的最好的是
SELECT (
SELECT * FROM tableName FOR XML PATH('Record'), TYPE
) FOR XML PATH('RecordParent'), ROOT('Root')
最终会像
一样<Root>
<RecordParent>
<Record>
<!--Fields selected with * end up here-->
</Record>
<Record>
<!--Fields selected with * end up here-->
</Record>
<Record>
<!--Fields selected with * end up here-->
</Record>
</RecordParent>
</Root>
我是如何通过FOR XML
获得正确结果的?
我可以用几行来完成
DECLARE @xml xml
SET @xml = (SELECT TOP 10 * FROM tableName FOR XML PATH('Record'), ROOT('Records'))
SELECT r.query('.')FROM @xml.nodes('//Record') R(r) FOR XML PATH('RecordParent'), ROOT('Root'), TYPE
答案 0 :(得分:1)
我可以用几行来完成
DECLARE @xml xml
SET @xml = (SELECT TOP 10 * FROM tableName FOR XML PATH('Record'), ROOT('Records'))
SELECT r.query('.')FROM @xml.nodes('//Record') R(r) FOR XML PATH('RecordParent'), ROOT('Root'), TYPE
答案 1 :(得分:0)
你当然可以使用FOR XML EXPLICIT获得结果,但这是一个PITA。由于FOR PATH不允许在路径中使用分隔符,我猜你运气不好,但也许你可以在XML上应用XQuery。
答案 2 :(得分:0)
这是一个黑客:
declare @table table (Id int identity(1,1), Name varchar(50))
insert into @table values ('asdf')
insert into @table values ('fdsa')
insert into @table values ('fhgdf')
insert into @table values ('qewry')
insert into @table values ('sdtkjfhj')
select
(
select *
from @table
for XML PATH('Record'), ROOT('RecordParent'), type
) for xml path('root')
答案 3 :(得分:0)
您可以定义它使用/用于层次结构
从客户端FOR XML ROOT('Root')中选择Top(10)id作为“Record Parent / Record / ClientID”