다음을 통해 공유


not 함수(XQuery)

$arg의 유효한 부울 값이 False인 경우 TRUE를 반환하고 $arg의 유효한 부울 값이 True인 경우 FALSE를 반환합니다.

구문

fn:not($arg as item()*) as xs:boolean

인수

  • $arg
    유효한 부울 값이 있는 항목의 시퀀스입니다.

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

1. not() XQuery 함수를 사용하여 카탈로그 설명에 <Specifications> 요소가 포함되지 않은 제품 모델 찾기

다음 쿼리는 카탈로그 설명에 <Specifications> 요소가 포함되지 않은 제품 모델에 대한 제품 모델 ID가 포함되는 XML을 생성합니다.

WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd)
SELECT ProductModelID, CatalogDescription.query('
       <Product 
           ProductModelID="{ sql:column("ProductModelID") }"
        />
') as Result
FROM Production.ProductModel
WHERE CatalogDescription.exist('
     /pd:ProductDescription[not(pd:Specifications/*)]  '
     ) = 0

이전 쿼리에서 다음을 유의하십시오.

  • 문서에서 네임스페이스가 사용되기 때문에 예제에는 WITH NAMESPACES 문이 사용됩니다. 다른 옵션은 XQuery 프롤로그에서 declare namespace를 사용하여 접두사를 정의하는 것입니다.

  • 그런 다음 쿼리는 <Product> 요소와 해당 ProductModelID 특성을 포함하는 XML을 생성합니다.

  • WHERE 절에는 행을 필터링하기 위해 exist() 메서드(XML 데이터 형식)가 사용됩니다. exist() 메서드는 <Specification> 자식 요소가 없는 <ProductDescription> 요소가 있는 경우 True를 반환합니다. 여기에서는 not() 함수가 사용되었습니다.

이 결과 집합은 각 제품 모델 카탈로그 설명에 <Specifications> 요소가 포함되어 있기 때문에 비어 있습니다.

2. not() XQuery 함수를 사용하여 MachineHours 특성이 없는 작업 센터 위치 검색

다음 쿼리는 Instructions 열에 대해 지정되었습니다. 이 열에는 제품 모델에 대한 제조 지침이 저장됩니다.

특정 제품 모델에 대해 이 쿼리는 MachineHours를 지정하지 않는 작업 센터 위치를 검색합니다. 즉, MachineHours 특성은 <Location> 요소에 대해 지정되어 있지 않습니다.

SELECT ProductModelID, Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" ;
     for $i in /AWMI:root/AWMI:Location[not(@MachineHours)]
     return
       <Location LocationID="{ $i/@LocationID }" 
                   LaborHrs="{ $i/@LaborHours }" >
        </Location>
') as Result
FROM Production.ProductModel
WHERE ProductModelID=7 

위의 코드에서 다음에 유의하십시오.

  • XQuery 프롤로그declarenamespace는 Adventure Works 제조 지침 네임스페이스 접두사를 정의합니다. 제조 지침 문서에 사용된 동일 네임스페이스를 나타냅니다.

  • 쿼리에서 not(@MachineHours) 조건자는 MachineHours 특성이 없는 경우 True를 반환합니다.

다음은 결과입니다.

ProductModelID Result 
-------------- --------------------------------------------
7              <Location LocationID="30" LaborHrs="1"/>
               <Location LocationID="50" LaborHrs="3"/>
               <Location LocationID="60" LaborHrs="4"/>

구현 시 제한 사항

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

  • not() 함수는 xs:boolean 유형의 인수, node()* 또는 빈 시퀀스만 지원합니다.