다음을 통해 공유


컨텍스트 함수 - position(XQuery)

적용 대상:SQL Server

현재 처리 중인 항목의 시퀀스 내에서 컨텍스트 항목의 위치를 나타내는 정수 값을 반환합니다.

구문

  
fn:position() as xs:integer  

설명

SQL Server 에서 fn:position() 은 컨텍스트 종속 조건자의 컨텍스트에서만 사용할 수 있습니다. 특히 대괄호([ ]) 내에서만 사용할 수 있습니다. 이 함수와 비교해도 정적 형식 유추 중에 카디널리티가 감소하지는 않습니다.

이 항목에서는 데이터베이스의 다양한 xml 형식 열에 저장된 XML 인스턴스에 대한 XQuery 예제를 AdventureWorks2022 제공합니다.

A. position() XQuery 함수를 사용하여 처음 두 개 제품 기능 검색

다음 쿼리는 제품 모델 카탈로그 설명에서 요소의 <Features> 처음 두 자식 요소인 처음 두 기능을 검색합니다. 더 많은 기능이 있는 경우 결과에 요소를 추가합니다 <there-is-more/> .

SELECT CatalogDescription.query('  
     declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
     <Product>   
          { /pd:ProductDescription/@ProductModelID }  
          { /pd:ProductDescription/@ProductModelName }   
          {  
            for $f in /pd:ProductDescription/pd:Features/*[position()<=2]  
            return  
            $f   
          }  
          {  
            if (count(/pd:ProductDescription/pd:Features/*) > 2)  
            then <there-is-more/>  
            else ()  
          }   
     </Product>          
') as x  
FROM Production.ProductModel  
WHERE CatalogDescription is not null  

이전 쿼리의 다음 사항에 유의하세요.

  • XQuery Prolog네임스페이스 키워드는 쿼리 본문에 사용되는 네임스페이스 접두사를 정의합니다.

  • 쿼리 본문은 ProductModelIDProductModelName 특성이 있는 Product> 요소가 있고 제품 기능이 자식 요소로 반환되는 XML<을 생성합니다.

  • position() 함수는 조건자에서 컨텍스트에서 Features> 자식 요소의 <위치를 결정하는 데 사용됩니다. 첫 번째 또는 두 번째 기능인 경우 반환됩니다.

  • IF 문은 제품 카탈로그에 두 개 이상의 기능이 있는 경우 결과에 there-is-more/> 요소를 추가<합니다.

  • 모든 제품 모델에 카탈로그 설명이 테이블에 저장된 것은 아니므로 WHERE 절은 CatalogDescriptions가 NULL인 행을 삭제하는 데 사용됩니다.

이는 부분적인 결과입니다.

<Product ProductModelID="19" ProductModelName="Mountain 100">  
  <p1:Warranty xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">  
    <p1:WarrantyPeriod>3 year</p1:WarrantyPeriod>  
    <p1:Description>parts and labor</p1:Description>  
  </p1:Warranty>  
  <p2:Maintenance xmlns:p2="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">  
    <p2:NoOfYears>10</p2:NoOfYears>  
    <p2:Description>maintenance contact available through your dealer or  
                    any AdventureWorks retail store.</p2:Description>  
  </p2:Maintenance>  
  <there-is-more/>  
</Product>   
...  

참고 항목

xml 데이터 형식에 대한 XQuery 함수