다음을 통해 공유


이름이 있는 열

적용 대상: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 로 표현되는 이름을 반환합니다MiddleFirstLast.

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, 자식에는 자식 MiddleLast 요소 자식이 있습니다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 때도 이 경우입니다.

한 열의 이름이 다릅니다.

이름이 다른 열이 그 사이에 나타나면 다음 수정된 쿼리와 같이 그룹화가 중단됩니다. 쿼리는 이전 쿼리에 지정된 대로 열과 열 사이에 주소 열을 추가하여 그룹화 및 그룹화FirstNameMiddleNameLastNameFirstName 중단됩니다.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>

참고 항목