Функции с логическими значениями — функция 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()*, или пустую последовательность.