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