これはおそらく簡単ですが、私はこれに頭がおならをしています...
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/>
私が必要とする結果は(3行目に注意してくださいNULL
)...
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
か?