Funciones de constructor (XQuery)

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 va a convertir.
  • TYP
    Cualquier tipo XSD integrado.

Notas

Se admiten constructores para tipos XSD atómicos base y derivados. Sin embargo, no se admiten los subtipos de xs:duration, que incluye 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

Este tema proporciona ejemplos de XQuery en instancias XML almacenadas en varias columnas de tipo xml de 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. 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. El documento contiene tres elementos <ProductDescription> de ejemplo, y cada uno de ellos contiene un elemento secundario <DateCreated>.

A continuación, se realiza una consulta en la variable para recuperar sólo las descripciones de producto que se crearon antes de una fecha específica. Para realizar comparaciones, la consulta utiliza la función de 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:

  • La estructura de bucle FOR ... WHERE se utiliza para recuperar el elemento <ProductDescription> que satisface la condición especificada en la cláusula WHERE.
  • La función de constructor dateTime() se utiliza para construir los valores de tipo dateTime de modo que se puedan comparar adecuadamente.
  • 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"/>

Vea también

Referencia

Funciones de XQuery con el tipo de datos xml

Conceptos

Construcción de XML (XQuery)

Ayuda e información

Obtener ayuda sobre SQL Server 2005