position 함수(XQuery)
현재 처리 중인 항목의 시퀀스 내에서 컨텍스트 항목의 위치를 나타내는 정수 값을 반환합니다.
구문
fn:position() as xs:integer
주의
SQL Server에서 **fn:position()**은 상황별 조건자 컨텍스트에서만 사용할 수 있습니다. 특히 사용 시 대괄호([ ])로 묶어야 합니다. 이 함수와 비교하면 정적 유형 유추 중에 카디널리티가 감소하지 않습니다.
예
이 항목에서는 AdventureWorks 데이터베이스의 다양한 xml 유형 열에 저장된 XML 인스턴스에 대한 XQuery 예를 보여 줍니다. 이러한 각 열에 대한 개요는 AdventureWorks 데이터베이스의 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 키워드는 쿼리 본문에 사용된 네임스페이스 접두사를 정의합니다.
쿼리 본문은 ProductModelID 및 ProductModelName 특성이 있는 <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 AdventureWorks retail store.</p2:Description>
</p2:Maintenance>
<there-is-more/>
</Product>
…