다음을 통해 공유


정량화된 식(XQuery)

적용 대상: SQL Server

실존적 수량자 및 범용 수량자는 두 시퀀스에 적용되는 부울 연산자의 다른 의미 체계를 지정합니다. 다음 표에 나와 있습니다.

실존적 수량자
두 시퀀스가 지정된 경우 첫 번째 시퀀스의 항목에 사용되는 비교 연산자에 따라 두 번째 시퀀스에서 일치하는 항목이 있으면 반환된 값은 True입니다.

범용 수량자
두 시퀀스가 지정된 경우 첫 번째 시퀀스의 모든 항목이 두 번째 시퀀스에서 일치하는 경우 반환된 값은 True입니다.

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

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

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