基于布尔值的函数 - not Function

适用范围:SQL Server

如果$arg的有效布尔值为 false,则返回 TRUE;如果$arg的有效布尔值为 true,则返回 FALSE。

语法

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

参数

$arg
具有有效布尔值一系列项。

示例

本主题针对存储在 AdventureWorks 数据库中各种 xml 类型列中的 XML 实例提供 XQuery 示例。

A. 使用 not() XQuery 函数查找其目录说明不包括 <Specifications> 元素的产品模型。

以下查询构造 XML,该 XML 包含其目录说明不包含 <Specifications> 元素的产品模型模型 ID 的产品模型 ID。

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 数据类型) 筛选行。 如果存在<不具有 <Specification> 子元素的 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 制造指令命名空间前缀。 它表示在生产说明文档中使用了相同的命名空间。

  • 在查询中,not(@MachineHours) 谓词返回 True(如果没有 MachineHours 属性)。

结果如下:

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

实现限制

限制如下:

  • not () 函数仅支持类型 xs:boolean 或 node()*或空序列的参数。

另请参阅

针对 xml 数据类型的 XQuery 函数