Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения: 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()*, или пустую последовательность.