Funções do construtor (XQuery)
Aplica-se: 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, não há suporte para os subtipos de xs:duration, que incluem xdt:yearMonthDuration e xdt:dayTimeDuration, e xs:QName, xs:NMTOKEN e xs:NOTATION . 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 de XQuery em relação a instâncias XML armazenadas em várias colunas de tipo xml no banco de dados AdventureWorks.
R. Usando a função dateTime() XQuery para recuperar descrições de produtos mais antigos
Neste exemplo, um documento XML de exemplo é atribuído primeiro a uma variável de tipo xml . Este documento contém três elementos de exemplo <ProductDescription
> , cada um contendo 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 construtora 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 atende à condição especificada na cláusula WHERE.
A função construtora dateTime() é usada para construir valores do 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"/>
Confira também
Construção XML (XQuery)
Funções XQuery em Tipos de Dados XML