Поделиться через


Функции с логическими значениями — функция not

Применимо к:SQL Server

Возвращает значение TRUE, если действующее логическое значение $arg равно false, и возвращает значение FALSE, если действующее логическое значение $arg имеет значение true.

Синтаксис

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

Аргументы

$arg
Последовательность элементов, которым соответствует действительное логическое значение.

Примеры

В этом разделе приведены примеры XQuery для экземпляров XML, хранящихся в различных столбцах типа XML в базе данных AdventureWorks.

О. Использование функции не() XQuery для поиска моделей продуктов, описания каталога которых не включают <элемент Спецификации> .

Следующий запрос создает 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 Prolog для определения префикса .

  • Затем запрос создает XML,который включает <Product> элемент и его атрибут ProductModelID.

  • Предложение WHERE использует метод exist() (тип данных XML) для фильтрации строк. Метод exist() возвращает значение True, если есть <элементы ProductDescription> , которые не имеют <дочерних элементов спецификации> . Обратите внимание на использование функции not().

Этот результирующий набор пуст, так как каждое описание каталога моделей продуктов включает <элемент "Спецификации> ".

B. Использование функции XQuery not() для получения информации о расположении цехов, не имеющих атрибута «MachineHours»

Следующий запрос адресован столбцу «Инструкции». В указанном столбце хранятся производственные инструкции для моделей продуктов.

Для любой модели продукта запрос извлекает информацию о расположении цехов, для которых не задан атрибут "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 Prolog определяет префикс пространства имен 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()*, или пустую последовательность.

См. также

Функции XQuery для типа данных XML