SQL Xml 在空记录集上返回空根标记

Dee*_*ons 4 schema sql-server-2005 xml select

我正在使用 Sql Server 2005 Express 版本在 xml 输出中显式地生成用户定义的节点。下面的代码工作正常,只是当用户表中不存在记录集时,我无法生成一个空节点。

代码:

select 1 as tag, null as parent,

FirstName as [User!1!FirstName!Element],

LastName as [User!1!LastName!Element]

FROM Users

FOR XML EXPLICIT
Run Code Online (Sandbox Code Playgroud)

输出:

<Users>
<FirstName>Ammy</FirstName>
<LastName>Dammy</LastName>
</Users>
<Users>
<FirstName>Lammy</FirstName>
<LastName>Lolly</LastName>
</Users>
Run Code Online (Sandbox Code Playgroud)

空表的预期输出:

<Users></Users>
Run Code Online (Sandbox Code Playgroud)

注意:我不喜欢这种xsnil方法,欢迎所有其他解决问题的方法

Rob*_*ler 6

您的问题的可能解决方案既不优雅也不干净(恕我直言),但它确实满足您的需求:

SELECT ISNULL(s.lmx, '<Users></Users>')
FROM 
    (
        select 1 as tag, null as parent,
        FirstName as [User!1!FirstName!Element],
        LastName as [User!1!LastName!Element]
        FROM Users
        FOR XML EXPLICIT
    ) AS s(lmx)
Run Code Online (Sandbox Code Playgroud)

在我的系统上的输出是:

<Users></Users>
Run Code Online (Sandbox Code Playgroud)

请让我知道你的想法。

编辑:

我接受了您的 select 语句并将其设为子查询。子查询首先运行并生成输出 XML 字符串或 NULL。如果结果为 NULL,则外部 SELECT 用空的 Users 节点 ( <Users></Users>)替换 NULL 值,否则生成的 XML 字符串就是结果。