이름이 있는 열
적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
다음은 이름을 가진 행 집합 열이 대/소문자를 구분하여 결과 XML에 매핑되는 특정 조건입니다.
열 이름은 at 기호(
@
)로 시작합니다.열 이름은 at 기호(
@
)로 시작되지 않습니다.열 이름은 at 기호(
@
)로 시작되지 않으며 슬래시 표시(/
)를 포함합니다.여러 열이 동일한 접두사를 공유합니다.
한 열의 이름은 다릅니다.
열 이름은 at 기호@
()로 시작합니다.
열 이름이 at 기호()로 시작하고 슬래시 표시(@
/
)를 포함하지 않는 경우 해당 열 값이 있는 요소의 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;
열 이름이 at 기호로 시작되지 않음(@
)
열 이름이 at sign(@
)으로 시작되지 않고 XPath 노드 테스트 중 하나가 아니며 슬래시 표시(/
)를 포함하지 않는 경우 기본적으로 행 요소의 하위 요소인 XML 요소가 row
만들어집니다.
다음 쿼리는 열 이름, 결과를 지정합니다. 따라서 result
요소 자식이 row
요소에 추가됩니다.
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>
열 이름은 at 기호(@
)로 시작되지 않고 슬래시 표시(/
)를 포함합니다.
열 이름이 at 기호()로 시작하지 않고 슬래시 표시(@
/
)를 포함하는 경우 열 이름은 XML 계층 구조를 나타냅니다. 예를 들어 열 이름이 "Name1/Name2/Name3.../Namen"인 경우 각 Namei는 현재 행 요소(i = 1)에 중첩되거나 이름 i-1이 있는 요소 아래에 있는 요소 이름을 나타냅니다. Namen이 @
시작되면 Namen-1 요소의 특성에 매핑됩니다.
예를 들어 다음 쿼리는 직원 ID와 이름 및 이름을 포함하는 복합 요소 EmpName
로 표현되는 이름을 반환합니다Middle
First
Last
.
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에는 EmpName
요소 아래에 자식이 row
있고EmpName
, 자식에는 자식 Middle
과 Last
요소 자식이 있습니다First
.
<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>
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기