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


empty (XQuery)

Возвращает True, если значением аргумента $arg является пустая последовательность. В противном случае функция возвращает значение False.

Синтаксис

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

Аргументы

  • $arg
    Последовательность элементов. Если последовательность пуста, функция возвращает значение True. В противном случае функция возвращает значение False.

Замечания

Функция fn:exists() не поддерживается. В качестве альтернативы можно использовать функцию not().

Примеры

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

А. Использование функции XQuery empty() для определения присутствия атрибута

В процессе производства изделия с кодом 7 этот запрос возвращает расположение всех цехов, не имеющих атрибута 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[empty(@MachineHours)]     return       <Location            LocationID="{ ($i/@LocationID) }"            LaborHrs="{ ($i/@LaborHours) }" >            {               $i/@MachineHours            }         </Location>') as ResultFROM Production.ProductModelwhere ProductModelID=7

Результат:

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

Следующий, слегка измененный запрос возвращает значение «NotFound», если отсутствует атрибут MachineHour:

SELECT ProductModelID, Instructions.query('declare namespace p14="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";     for $i in /p14:root/p14:Location     return       <Location            LocationID="{ ($i/@LocationID) }"            LaborHrs="{ ($i/@LaborHours) }" >            {                  if (empty($i/@MachineHours)) then                    attribute MachineHours { "NotFound" }                 else                    attribute MachineHours { data($i/@MachineHours) }            }         </Location>') as ResultFROM Production.ProductModelwhere ProductModelID=7

Результат:

ProductModelID Result                       -------------- -----------------------------------7                <Location LocationID="10" LaborHrs="2.5" MachineHours="3"/>  <Location LocationID="20" LaborHrs="1.75" MachineHours="2"/>  <Location LocationID="30" LaborHrs="1" MachineHours="NotFound"/>  <Location LocationID="45" LaborHrs="0.5" MachineHours="0.65"/>  <Location LocationID="50" LaborHrs="3" MachineHours="NotFound"/>  <Location LocationID="60" LaborHrs="4" MachineHours="NotFound"/>