Funciones de constructor (XQuery)

Se aplica a:SQL Server

Desde una entrada especificada, las funciones de constructor crean instancias de cualquiera de los tipos atómicos integrados o definidos por el usuario.

Sintaxis

  
TYP($atomicvalue as xdt:anyAtomicType?  
  
) as TYP?  
  

Argumentos

$strval
Cadena que se convertirá.

TYP
Cualquier tipo XSD integrado.

Comentarios

Se admiten constructores para tipos XSD atómicos base y derivados. Sin embargo, no se admiten los subtipos xs:duration, que incluyen xdt:yearMonthDuration y xdt:dayTimeDuration, y xs:QName, xs:NMTOKEN y xs:NOTATION . Los tipos atómicos definidos por el usuario que están disponibles en las colecciones de esquemas asociadas también están disponibles, siempre que se deriven directa o indirectamente de los tipos siguientes.

Tipos base compatibles

Éstos son los tipos base admitidos:

  • xs:string

  • xs:boolean

  • xs:decimal

  • xs:float

  • xs:double

  • xs:duration

  • xs:dateTime

  • xs:time

  • xs:date

  • xs:gYearMonth

  • xs:gYear

  • xs:gMonthDay

  • xs:gDay

  • xs:gMonth

  • xs:hexBinary

  • xs:base64Binary

  • xs:anyURI

Tipos derivados compatibles

Éstos son los tipos derivados admitidos:

  • xs:normalizedString

  • xs:token

  • xs:language

  • xs:Name

  • xs:NCName

  • xs:ID

  • xs:IDREF

  • xs:ENTITY

  • xs:integer

  • xs:nonPositiveInteger

  • xs:negativeInteger

  • xs:long

  • xs:int

  • xs:short

  • xs:byte

  • xs:nonNegativeInteger

  • xs:unsignedLong

  • xs:unsignedInt

  • xs:unsignedShort

  • xs:unsignedByte

  • xs:positiveInteger

SQL Server también admite el doblado constante para invocaciones de funciones de construcción de las formas siguientes:

  • Si el argumento es un literal de cadena, la expresión se evaluará durante la compilación. Cuando el valor no satisfaga las restricciones de tipo, se producirá un error estático.

  • Si el argumento es un literal de otro tipo, la expresión se evaluará durante la compilación. Cuando el valor no satisfaga las restricciones de tipo, se devolverá la secuencia vacía.

Ejemplos

En este tema se proporcionan ejemplos de XQuery en instancias XML almacenadas en varias columnas de tipo xml de la base de datos AdventureWorks.

A. Usar la función dateTime() de XQuery para recuperar descripciones antiguas de productos

En este ejemplo, un documento XML de ejemplo se asigna primero a una variable de tipo xml . Este documento contiene tres elementos de ejemplo <ProductDescription> , con cada uno que contiene un <DateCreated> elemento secundario.

A continuación, se realiza una consulta en la variable para recuperar solo las descripciones de producto que se crearon antes de una fecha específica. Para fines de comparación, la consulta usa la función constructor xs:dateTime() para escribir las fechas.

declare @x xml  
set @x = '<root>  
<ProductDescription ProductID="1" >  
  <DateCreated DateValue="2000-01-01T00:00:00Z" />  
  <Summary>Some Summary description</Summary>  
</ProductDescription>  
<ProductDescription  ProductID="2" >  
  <DateCreated DateValue="2001-01-01T00:00:00Z" />  
  <Summary>Some Summary description</Summary>  
</ProductDescription>  
<ProductDescription ProductID="3" >  
  <DateCreated DateValue="2002-01-01T00:00:00Z" />  
  <Summary>Some Summary description</Summary>  
</ProductDescription>  
</root>'  
  
select @x.query('  
     for $PD in  /root/ProductDescription  
     where xs:dateTime(data( ($PD/DateCreated/@DateValue)[1] )) < xs:dateTime("2001-01-01T00:00:00Z")  
     return  
        element Product  
       {   
        ( attribute ProductID { data($PD/@ProductID ) },  
        attribute DateCreated { data( ($PD/DateCreated/@DateValue)[1] ) } )  
        }  
 ')  

Observe lo siguiente en la consulta anterior:

  • FOR ... La estructura del bucle WHERE se usa para recuperar el <elemento ProductDescription> que cumple la condición especificada en la cláusula WHERE.

  • La función constructor dateTime() se usa para construir valores de tipo dateTime para que se puedan comparar correctamente.

  • Finalmente, la consulta construye el XML resultante. Dado que se pretende construir una secuencia de atributos, en la construcción de XML se utilizan comas y paréntesis.

El resultado es el siguiente:

<Product   
   ProductID="1"   
   DateCreated="2000-01-01T00:00:00Z"/>  

Consulte también

Construcción de XML (XQuery)
Funciones de XQuery con el tipo de datos xml