这可能很简单,但我对这个有一个脑子放屁......
我将FOR XML EXPLICIT
其用作子查询的一部分,以便可以显式定义返回的 XML 的格式。因此我UNION ALL
用来定义该格式。
NULL
这工作正常,但如果该子查询中没有行,我需要它返回......目前它正在返回一个空的根元素: <codes/>
。那是因为我需要定义的第一行。
这是一个 sqlfiddlecom,下面的所有内容供您查看。
这是 TSQL 的一个版本,因为它目前是......
SELECT
P.[PROJECTID],
P.[PROJECTNAME],
( SELECT *
FROM (
SELECT
1 AS TAG,
NULL AS PARENT,
NULL AS 'codes!1',
NULL AS 'code!2!!element',
NULL AS 'code!2!split'
UNION ALL
SELECT
2 AS TAG,
1 AS PARENT,
NULL,
C.[CODE],
C.[SPLIT]
FROM [CODES] C
WHERE C.[PROJECTID] = P.[PROJECTID]
) AS [CODEXMLDATA]
FOR XML EXPLICIT
) AS [CODESXML]
FROM [PROJECTS] P
示例数据将沿着
PROJECTS table
PROJECTID PROJECTNAME
1 This
2 That
3 Other
CODES table
PROJECTID CODE SPLIT
1 ABC 45
1 BCD 65
2 CDE 100
结果出来了...
PROJECTID PROJECTNAME CODESXML
1 This <codes><code split="45">ABC</code><code split="55">BCD</code></codes>
2 That <codes><code split="100">CDE</code></codes>
3 Other <codes/>
我需要的结果是(注意NULL
第 3 行)...
PROJECTID PROJECTNAME CODESXML
1 This <codes><code split="45">ABC</code><code split="55">BCD</code></codes>
2 That <codes><code split="100">CDE</code></codes>
3 Other NULL
NULL
任何人都可以给我一个提示,如果没有,我该如何让它返回CODES
?