컨텍스트 함수 - 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의 네임스페이스 키워드는 쿼리 본문에 사용되는 네임스페이스 접두사를 정의합니다.
쿼리 본문은 ProductModelID 및 ProductModelName 특성이 있는 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>
...