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"/>