정량화된 식(XQuery)

존재 및 범용 수량자는 두 가지 시퀀스에 적용되는 부울 연산자에 다른 의미 체계를 지정합니다. 다음 표에서는 이러한 수량자를 보여 줍니다.

  • 존재 수량자
    두 개의 시퀀스에서 사용된 비교 연산자를 기준으로 첫 번째 시퀀스의 임의 항목이 두 번째 시퀀스의 항목과 일치하면 True 값이 반환됩니다.
  • 범용 수량자
    두 개의 시퀀스에서 첫 번째 시퀀스의 모든 항목이 두 번째 시퀀스의 항목과 일치하면 True 값이 반환됩니다.

XQuery는 다음 형식의 정량화된 식을 지원합니다.

( some | every ) <variable> in <Expression> (,? satisfies <Expression>

쿼리에 이러한 식을 사용하여 하나 이상의 시퀀스에서 존재 또는 범용 정량화를 명시적으로 식에 적용할 수 있습니다. SQL Server 에서는 satisfies 절에 있는 식의 결과가 노드 시퀀스, 빈 시퀀스 또는 부울 값 중 하나여야 합니다. 식의 결과에 알맞은 부울 값이 정량화에 사용됩니다. 수량자로 바인딩된 값 중 하나 이상의 satisfy 식 결과가 True인 경우 some을 사용하는 존재 정량화가 True를 반환합니다. every를 사용하는 범용 정량화는 수량자로 바인딩된 모든 값에 대해 True여야 합니다.

예를 들어 다음 쿼리는 모든 <Location> 요소에 LocationID 특성이 있는지 확인합니다.

SELECT Instructions.query('
     declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
        if (every $WC in //AWMI:root/AWMI:Location 
            satisfies $WC/@LocationID)
        then
             <Result>All work centers have workcenterLocation ID</Result>
         else
             <Result>Not all work centers have workcenterLocation ID</Result>
') as Result
FROM Production.ProductModel
where ProductModelID=7

LocationID는 <Location> 요소의 필수적 특성이므로 예상한 결과가 나타납니다.

<Result>All work centers have Location ID</Result> 

다음 쿼리에서와 같이 query() 메서드를 사용하는 대신 value() 메서드를 사용하여 관계형 영역에 결과를 반환할 수 있습니다. 모든 업무 센터 위치에 LocationID 특성이 있으면 쿼리에서 True를 반환하고 그렇지 않으면 False를 반환합니다.

SELECT Instructions.value('
     declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
        every $WC in  //AWMI:root/AWMI:Location 
            satisfies $WC/@LocationID', 
  'nvarchar(10)') as Result
FROM Production.ProductModel
where ProductModelID=7

다음 쿼리에서는 제품 사진 중 하나의 크기가 작은지 확인합니다. 제품 카탈로그 XML에 각 제품 사진이 다른 크기로 다양하게 저장되어 있습니다. 제품 카탈로그 XML마다 하나 이상의 작은 사진이 들어 있는지 확인할 수 있습니다. 다음 쿼리에서 이 작업을 수행합니다.

SELECT ProductModelID, CatalogDescription.value('
     declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
     some $F in /PD:ProductDescription/PD:Picture
        satisfies $F/PD:Size="small"', 'nvarchar(20)') as SmallPicturesStored
FROM Production.ProductModel
WHERE ProductModelID = 19

다음은 결과의 일부입니다.

ProductModelID SmallPicturesStored 
-------------- --------------------
19             true      

구현 시 제한 사항

제한 사항은 다음과 같습니다.

  • 정량화된 식의 변수를 바인딩할 때는 유형 어설션이 지원되지 않습니다.

참고 항목

개념

XQuery 식

도움말 및 정보

SQL Server 2005 지원 받기