empty (función de XQuery)

Devuelve True si el valor de $arg es una secuencia vacía. De lo contrario, la función devuelve False.

Sintaxis

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

Argumentos

  • $arg
    Secuencia de elementos. Si la secuencia está vacía, la función devuelve True. De lo contrario, la función devuelve False.

Notas

No se admite la función fn:exists(). Como alternativa, se puede utilizar la función not().

Ejemplos

En este tema se ofrecen ejemplos de consultas XQuery con instancias XML almacenadas en varias columnas de tipo xml en la base de datos AdventureWorks. Para obtener información general de cada una de estas columnas, vea Representación de tipo de datos xml en la base de datos AdventureWorks.

A. Utilizar la función empty() de XQuery para determinar si un atributo está presente

En el proceso de fabricación del modelo de producto 7, esta consulta devuelve todos los centros de trabajo que no tienen el atributo 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 Result
FROM Production.ProductModel
where ProductModelID=7

El resultado es el siguiente:

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

La siguiente consulta, ligeramente modificada, devuelve "NotFound" si el atributo MachineHour no está presente:

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

El resultado es el siguiente:

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

Vea también

Referencia

Funciones de XQuery con el tipo de datos xml
exist() (método del tipo de datos xml)

Ayuda e información

Obtener ayuda sobre SQL Server 2005