Funções do construtor (XQuery)
Aplica-se a:SQL Server
De uma entrada especificada, as funções do construtor criam instâncias de qualquer tipo atômico interno XSD definido pelo usuário.
Sintaxe
TYP($atomicvalue as xdt:anyAtomicType?
) as TYP?
Argumentos
$strval
A cadeia de caracteres que será convertida.
TYP
Qualquer tipo XSD interno.
Comentários
Há suporte para construtores de tipos base e XSD derivados atômicos. No entanto, os subtipos de xs:duration, que inclui xdt:yearMonthDuration e xdt:dayTimeDuration, e xs:QName, xs:NMTOKEN e xs:NOTATION não têm suporte. Tipos atômicos definidos pelo usuário, que estejam disponíveis nas coleções de esquemas associadas também estarão disponíveis, desde que eles sejam direta ou indiretamente derivados dos tipos a seguir.
Tipos de base com suporte
Esses são os tipos base com suporte:
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 com suporte
Estes são os tipos derivados com suporte:
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
O SQL Server também oferece suporte para dobra constante para invocações de funções de construção nas seguintes maneiras:
Se o argumento for uma cadeia de caracteres literal, a expressão será avaliada durante a compilação. Quando o valor não atender às restrições de tipo, um erro estático será gerado.
Se o argumento for um literal de outro tipo, a expressão será avaliada durante a compilação. Quando o valor não atender às restrições de tipo, uma sequência vazia será retornada.
Exemplos
Este tópico fornece exemplos XQuery em instâncias XML armazenadas em várias colunas de tipo xml no banco de dados AdventureWorks.
a. Usando a função dateTime() XQuery para recuperar descrições de produtos mais antigos
Neste exemplo, um documento XML de exemplo é atribuído pela primeira vez a uma variável de tipo xml . Este documento contém três elementos de exemplo <ProductDescription
> , com cada um que contém um <DateCreated
> elemento filho.
A variável é então consultada para recuperar apenas aquelas descrições de produtos que tenham sido criados antes de uma data específica. Para fins de comparação, a consulta usa a função de construtor xs:dateTime() para digitar as datas.
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 o seguinte na consulta anterior:
O FOR... A estrutura de loop WHERE é usada para recuperar o <elemento ProductDescription> que satisfaz a condição especificada na cláusula WHERE.
A função de construtor dateTime() é usada para construir valores de tipo dateTime para que possam ser comparados adequadamente.
A consulta então constrói o XML resultante. Como você está construindo uma sequência de atributos, vírgulas e parênteses são usados na construção XML.
Este é o resultado:
<Product
ProductID="1"
DateCreated="2000-01-01T00:00:00Z"/>
Consulte Também
Construção XML (XQuery)
Funções XQuery em tipos de dados xml