Sql 从不存在行的XML显式子查询返回NULL
这可能很简单,但我在这上面放了个屁 我将使用Sql 从不存在行的XML显式子查询返回NULL,sql,xml,tsql,sql-server-2005,Sql,Xml,Tsql,Sql Server 2005,这可能很简单,但我在这上面放了个屁 我将使用FOR XML EXPLICIT作为子查询的一部分,以便明确定义返回的XML的格式。因此,我使用UNION ALL来定义该格式 这工作正常,但如果子查询中没有行,我需要它返回NULL。。。此时它返回一个空的根元素:。这是因为我需要定义的第一行 这是TSQL的当前版本 SELECT P.[PROJECTID], P.[PROJECTNAME], ( SELECT * FROM (
FOR XML EXPLICIT
作为子查询的一部分,以便明确定义返回的XML的格式。因此,我使用UNION ALL
来定义该格式
这工作正常,但如果子查询中没有行,我需要它返回NULL
。。。此时它返回一个空的根元素:
。这是因为我需要定义的第一行
这是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
?试试这个代码
SELECT distinct
P.[PROJECTID],
P.[PROJECTNAME],
case when (p.projectid = c.projectid) then
( 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
) else null end AS [CODESXML]
FROM [PROJECTS] P
left join [CODES] C on C.[PROJECTID] = P.[PROJECTID]
SQLFiddle:试试这段代码
SELECT distinct
P.[PROJECTID],
P.[PROJECTNAME],
case when (p.projectid = c.projectid) then
( 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
) else null end AS [CODESXML]
FROM [PROJECTS] P
left join [CODES] C on C.[PROJECTID] = P.[PROJECTID]
SQLFiddle:+1表示大脑放屁,哦,还有你对问题的描述。如果我不确定如何将案例集成到@Viji中,你可以使用案例,你能给出一个例子作为答案吗?或者修改?嗨,我已经包含了答案,请检查。+1表示大脑放屁,哦,以及你对问题的描述。如果子句我不确定如何将案例集成到@Viji中,你可以使用案例,你能举个例子作为答案吗?或者更改?嗨,我已经包括了答案,请检查。