position 함수(XQuery)

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

구문

fn:position() as xs:integer

주의

SQL Server에서 **fn:position()**은 상황별 조건자 컨텍스트에서만 사용할 수 있습니다. 특히 사용 시 대괄호([ ])로 묶어야 합니다. 이 함수와 비교하면 정적 유형 유추 중에 카디널리티가 감소하지 않습니다.

이 항목에서는 AdventureWorks2008R2 데이터베이스의 다양한 xml 유형 열에 저장된 XML 인스턴스에 대한 XQuery 예를 보여 줍니다. 이러한 각 열에 대한 개요는 AdventureWorks2008R2 데이터베이스의 xml 데이터 형식 표시를 참조하십시오.

1. 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 프롤로그에서 namespace 키워드는 쿼리 본문에 사용된 네임스페이스 접두사를 정의합니다.

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

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

  • 제품 카탈로그에 3개 이상의 기능이 있는 경우 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 Adventure Works retail store.</p2:Description>

</p2:Maintenance>

<there-is-more/>

</Product>