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> 元素的产品型号。

以下查询将为目录说明中不包括 <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 Prolog 中的 declare namespace 关键字来定义前缀。
  • 然后,该查询将构造包含 <Product> 元素及其 ProductModelID 属性的 XML。
  • WHERE 子句将使用 exist() 方法(XML 数据类型) 来筛选行。如果存在没有 <ProductDescription> 子元素的 <ProductDescription> 元素,则 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 Prolog 中的 declarenamespace 定义了 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()* 或空序列的参数。

请参阅

参考

针对 xml 数据类型的 XQuery 函数

帮助和信息

获取 SQL Server 2005 帮助