Freigeben über


empty-Funktion (XQuery)

Gibt True zurück, wenn der Wert von $arg eine leere Sequenz ist. Andernfalls gibt die Funktion False zurück.

Syntax

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

Argumente

  • $arg
    Eine Sequenz aus Elementen. Falls die Sequenz leer ist, gibt die Funktion True zurück. Andernfalls gibt die Funktion False zurück.

Hinweise

Die fn:exists()-Funktion wird unterstützt. Alternativ kann die not()-Funktion verwendet werden.

Beispiele

In diesem Thema werden XQuery-Beispiele auf XML-Instanzen bereitgestellt, die in zahlreichen Spalten des xml -Typs in der AdventureWorks-Datenbank gespeichert sind. Eine Übersicht über jede dieser Spalten finden Sie unter Darstellung des xml-Datentyps in der AdventureWorks-Datenbank.

A. Verwenden der empty() XQuery-Funktion zum Bestimmen, ob ein Attribut vorhanden ist

Im Herstellungsvorgang für Produktmodell 7 gibt diese Abfrage alle Arbeitsplatzstandorte zurück, die über kein MachineHours-Attribut verfügen.

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 Result
FROM Production.ProductModel
where ProductModelID=7

Dies ist das Ergebnis:

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

Die folgende, leicht geänderte Abfrage gibt "NotFound" zurück, wenn kein MachineHour-Attribut vorhanden ist.

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 Result
FROM Production.ProductModel
where ProductModelID=7

Dies ist das Ergebnis:

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