SQL Server:将2个TSQL查询结果转换为XML

时间:2015-01-29 09:42:01

标签: sql-server xml tsql

我们有2个TSQL查询,每个查询都从count语句中返回一个数字:

select count(*)
from 
    (select 
        *,
        row_number() over (partition by Username order by EntryDatetime desc) as seqnum
    from [log]) t
where 
    seqnum = 1 
    and EventDesc in ('Logon', 'reconnection');

select COUNT(*)
from 
    (select 
        *,
        row_number() over (partition by Username order by EntryDatetime desc) as seqnum
    from [log]
    where EntryDatetime > convert(varchar(255), dateadd(month, -1, getdate()), 121)) t
where 
    seqnum = 1;

我们如何将两个结果组合起来创建1个XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <item>15</item>
    <min>
        <value>0</value>
        <text>Min Users</text>
    </min>
    <max>
       <value>30</value>
       <text>Max Users</text>
    </max>
</root>

我们尝试过使用xpshell和bcp,但无法看到2个查询的结果如何用于制作相同的XML文件?

1 个答案:

答案 0 :(得分:2)

您可以使用FOR XML子句在TSQL中完成所有操作,无需尝试在外部组合2个结果集。

; with cte as (
    select 15 as i, 0 as v, 'Min Users' as t
    union all
    select null as i, 30 as v, 'Max Users' as t
)
select
    i as [item],
    v as [min/value], 
    t as [min/text]
from
    cte
for xml path (''), root ('root')