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
方法,欢迎所有其他解决问题的方法
您的问题的可能解决方案既不优雅也不干净(恕我直言),但它确实满足您的需求:
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 字符串就是结果。