要素中心の XML を取得する ELEMENT ディレクティブを指定した場合、列に NULL 値がある場合、対応する要素は EXPLICIT モードによって生成されません。 必要に応じて ELEMENTXSINIL ディレクティブを指定して、 xsi:nil
属性が値 TRUE で設定されている NULL 値の生成要素を要求できます。
次のクエリは、従業員アドレスを含む XML を構築します。
AddressLine2
列とCity
列の場合、列名は ELEMENTXSINIL
ディレクティブを指定します。 これにより、行セット内の AddressLine2
列と City
列の NULL 値の要素が生成されます。
USE AdventureWorks2012;
GO
SELECT 1 as Tag,
NULL as Parent,
E.BusinessEntityID as [Employee!1!EmpID],
BEA.AddressID as [Employee!1!AddressID],
NULL as [Address!2!AddressID],
NULL as [Address!2!AddressLine1!ELEMENT],
NULL as [Address!2!AddressLine2!ELEMENTXSINIL],
NULL as [Address!2!City!ELEMENTXSINIL]
FROM HumanResources.Employee AS E
INNER JOIN Person.BusinessEntityAddress AS BEA
ON E.BusinessEntityID = BEA.BusinessEntityID
UNION ALL
SELECT 2 as Tag,
1 as Parent,
E.BusinessEntityID,
BEA.AddressID,
A.AddressID,
AddressLine1,
AddressLine2,
City
FROM HumanResources.Employee AS E
INNER JOIN Person.BusinessEntityAddress AS BEA
ON E.BusinessEntityID = BEA.BusinessEntityID
INNER JOIN Person.Address AS A
ON BEA.AddressID = A.AddressID
ORDER BY [Employee!1!EmpID],[Address!2!AddressID]
FOR XML EXPLICIT;
結果の一部を次に示します。
<Employee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
EmpID="1" AddressID="249">
<Address AddressID="249">
<AddressLine1>4350 Minute Dr.</AddressLine1>
<AddressLine2 xsi:nil="true" />
<City>Minneapolis</City>
</Address>
</Employee>
...