not 函數 (XQuery)

如果 $arg 的有效布林值為 false,就會傳回 TRUE,而如果 $arg 的有效布林值為 true,就會傳回 FALSE。

語法

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

引數

  • $arg
    具有效布林值的一連串項目。

範例

此主題提供 XML 執行個體的 XQuery 範例,它儲存在 AdventureWorks 資料庫中的不同 xml 類型資料行中。如需這些資料行中每個資料行的概觀,請參閱<在 AdventureWorks 資料庫中的 xml 資料類型表示法>。

A. 使用 not() XQuery 函數尋找其目錄描述不包含 <Specifications> 元素的產品型號

以下查詢會建構 XML,而此 XML 包含其目錄描述不包含 <Specifications> 元素的產品型號所屬識別碼。

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 資料類型)篩選資料列。 如果有 <ProductDescription> 元素沒有 <Specification> 子元素,exist() 方法就會傳回 True。 請記下 not() 函數的用法。

因為每個產品型號目錄描述都包含 <Specifications> 元素,所以此結果集為空白。

B. 使用 not() XQuery 函數擷取沒有 MachineHours 屬性的工作中心位置

以下查詢是針對 Instructions 資料行而指定。 此資料行儲存了產品型號的製造指示。

對於特定的產品型號,此查詢會擷取未指定 MachineHours 的工作中心位置。 亦即,未對 <Location> 元素指定 MachineHours

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 初構中的 declare namespace 會定義 Adventure Works 製造指示前置詞。 其代表的命名空間跟製造指示文件中使用的相同。

  • 在查詢中,如果沒有 MachineHours 屬性,not(@MachineHours) 述詞就會傳回 True。

以下是結果:

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

實行限制

限制如下:

  • not() 函數只支援 xs:boolean 或 node()* 的引數,或是空白時序。