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.
Comentarios
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.
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 solo 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