이름이 있는 열
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance
다음은 이름이 있는 행 집합 열이 대/소문자를 구분하여 결과 XML에 매핑되는 특정 조건입니다.
열 이름이
@
기호로 시작하는 경우열 이름이
@
기호로 시작하지 않는 경우열 이름이
@
기호로 시작하지 않고 슬래시 기호(/
)를 포함하는 경우여러 열이 동일한 접두사를 공유하는 경우
한 열의 이름이 다른 경우
열 이름이 @
기호로 시작하는 경우
열 이름이 @
기호로 시작하고 슬래시 표시(/
)를 포함하지 않는 경우 해당 열 값이 있는 row
요소의 특성이 만들어집니다. 예를 들어 다음 쿼리는 2개의 열(@PmId, Name
)로 구성된 행 집합을 반환합니다. 결과 XML에서 PmId
특성이 해당 row
요소에 추가되고 ProductModelID
의 값이 여기에 할당됩니다.
SELECT ProductModelID as "@PmId",
Name
FROM Production.ProductModel
WHERE ProductModelID = 7
FOR XML PATH;
다음은 결과입니다.
<row PmId="7">
<Name>HL Touring Frame</Name>
</row>
특성은 같은 수준에서 요소 노드, 텍스트 노드 등 다른 노드 유형 앞에 와야 합니다. 다음 쿼리에서 오류가 반환됩니다.
SELECT Name,
ProductModelID as "@PmId"
FROM Production.ProductModel
WHERE ProductModelID = 7
FOR XML PATH;
열 이름이 @
기호로 시작하지 않는 경우
열 이름이 @
기호로 시작하지 않고 XPath 노드 테스트 중 하나가 아니며 슬래시 표시(/
)를 포함하지 않는 경우, 기본적으로 행 요소 row
의 하위 요소인 XML 요소가 만들어집니다.
다음 쿼리는 결과로 열 이름을 지정합니다. 따라서 이 row
요소에 result
하위 요소가 추가됩니다.
SELECT 2 + 2 as result
for xml PATH;
다음은 결과입니다.
<row>
<result>4</result>
</row>
다음 쿼리는 xml 형식의 Instructions
열에 대해 지정된 XQuery에서 반환된 XML의 열 이름인 ManuWorkCenterInformation
을 지정합니다. 따라서 ManuWorkCenterInformation
요소가 row
요소의 자식으로 추가됩니다.
SELECT
ProductModelID,
Name,
Instructions.query(
'declare namespace MI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
/MI:root/MI:Location
') as ManuWorkCenterInformation
FROM Production.ProductModel
WHERE ProductModelID=7
FOR XML PATH;
다음은 결과입니다.
<row>
<ProductModelID>7</ProductModelID>
<Name>HL Touring Frame</Name>
<ManuWorkCenterInformation>
<MI:Location ...LocationID="10" ...></MI:Location>
<MI:Location ...LocationID="20" ...></MI:Location>
...
</ManuWorkCenterInformation>
</row>
열 이름이 @
기호로 시작하지 않고 슬래시 기호(/
)를 포함하는 경우
열 이름이 @
기호로 시작하지 않지만 슬래시 기호(/
)를 포함할 경우 열 이름은 XML 계층을 나타냅니다. 예를 들어 열 이름이 "Name1/Name2/Name3.../Namen"인 경우, 각 Namei는 현재 행 요소(i = 1인 경우)에 중첩되거나 이름 Namei-1이 있는 요소 아래에 있는 요소 이름을 나타냅니다. Namen이 @
으로 시작하는 경우 Namen-1 요소의 특성에 매핑됩니다.
예를 들어 다음 쿼리는 First
, Middle
및 Last
이름이 포함된 복합 요소 EmpName
으로 표현되는 이름을 반환합니다.
SELECT EmployeeID "@EmpID",
FirstName "EmpName/First",
MiddleName "EmpName/Middle",
LastName "EmpName/Last"
FROM HumanResources.Employee E, Person.Contact C
WHERE E.EmployeeID = C.ContactID AND
E.EmployeeID = 1
FOR XML PATH;
열 이름은 PATH 모드에서 XML을 생성하는 경로로 사용됩니다. 직원 ID 값이 포함된 열 이름은 '@' 기호로 시작합니다. 따라서 EmpID
특성이 row
요소에 추가됩니다. 다른 모든 열에는 계층을 나타내는 열 이름에 슬래시 기호(/
)가 있습니다. 결과 XML는 row
요소 아래에 EmpName
자식이 있고, EmpName
자식은 First
, Middle
및 Last
요소 자식을 갖습니다.
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
<Last>Achong</Last>
</EmpName>
</row>
직원 중간 이름은 null이며 기본적으로 null 값은 요소나 특성이 없음을 의미합니다. NULL 값에 대해 요소를 생성하려면 이 쿼리와 같이 XSINIL을 사용하여 ELEMENTS 지시어를 지정하면 됩니다.
SELECT EmployeeID "@EmpID",
FirstName "EmpName/First",
MiddleName "EmpName/Middle",
LastName "EmpName/Last"
FROM HumanResources.Employee E, Person.Contact C
WHERE E.EmployeeID = C.ContactID AND
E.EmployeeID = 1
FOR XML PATH, ELEMENTS XSINIL;
다음은 결과입니다.
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
EmpID="1">
<EmpName>
<First>Gustavo</First>
<Middle xsi:nil="true" />
<Last>Achong</Last>
</EmpName>
</row>
기본적으로 PATH 모드는 요소 중심 XML을 생성합니다. 따라서 PATH 모드 쿼리에서 ELEMENTS 지시어를 지정해도 영향이 없습니다. 그러나 이전 예시와 같이 ELEMENTS 지시어는 XSINIL에서 null 값에 대한 요소를 생성하는 데 유용합니다.
ID 및 이름 외에도 다음 쿼리는 직원 주소를 검색합니다. 주소 열에 대한 열 이름의 경로에 따라 Address
요소 자식이 row
요소에 추가되고 주소 세부 정보가 Address
요소의 요소 자식으로 추가됩니다.
SELECT EmployeeID "@EmpID",
FirstName "EmpName/First",
MiddleName "EmpName/Middle",
LastName "EmpName/Last",
AddressLine1 "Address/AddrLine1",
AddressLine2 "Address/AddrLIne2",
City "Address/City"
FROM HumanResources.Employee E,
Person.Contact C,
Person.Address A
WHERE E.EmployeeID = C.ContactID
AND E.AddressID = A.AddressID
AND E.EmployeeID = 1
FOR XML PATH;
다음은 결과입니다.
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
<Last>Achong</Last>
</EmpName>
<Address>
<AddrLine1>7726 Driftwood Drive</AddrLine1>
<City>Monroe</City>
</Address>
</row>
여러 열이 동일한 경로 접두사를 공유합니다.
여러 후속 열이 동일한 경로 접두사를 공유하는 경우 동일한 이름으로 그룹화됩니다. 서로 다른 네임스페이스 접두사를 사용하면 같은 네임스페이스로 바인딩되더라도 경로가 다르다고 간주됩니다. 이전 쿼리에서 FirstName
, MiddleName
및 LastName
열은 동일한 EmpName
접두사를 공유하므로 EmpName
요소의 자식으로 추가됩니다. 이전 예시에서 Address
요소를 만들 때도 마찬가지입니다.
한 열의 이름이 다릅니다.
이름이 다른 열이 중간에 나타나면 다음의 수정된 쿼리와 같이 그룹화가 중단됩니다. 쿼리는 이전 쿼리에 지정된 대로 FirstName
열과 MiddleName
열 사이에 주소 열을 추가하여 LastName
, FirstName
및 MiddleName
그룹화가 중단됩니다.
SELECT EmployeeID "@EmpID",
FirstName "EmpName/First",
AddressLine1 "Address/AddrLine1",
AddressLine2 "Address/AddrLIne2",
City "Address/City",
MiddleName "EmpName/Middle",
LastName "EmpName/Last"
FROM HumanResources.EmployeeAddress E,
Person.Contact C,
Person.Address A
WHERE E.EmployeeID = C.ContactID
AND E.AddressID = A.AddressID
AND E.EmployeeID = 1
FOR XML PATH;
결과적으로 쿼리는 두 개의 EmpName
요소를 만듭니다. 첫 번째 EmpName
요소는 FirstName
요소 자식을 포함하고 두 번째 EmpName
요소는 MiddleName
및 LastName
요소 자식을 포함합니다.
다음은 결과입니다.
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
</EmpName>
<Address>
<AddrLine1>7726 Driftwood Drive</AddrLine1>
<City>Monroe</City>
</Address>
<EmpName>
<Last>Achong</Last>
</EmpName>
</row>