Funções do construtor (XQuery)
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. Entretanto, não há suporte para os subtipos 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 seqüência vazia será retornada.
Exemplos
Este tópico fornece exemplos de XQuery em instâncias XML armazenadas em várias colunas do tipo xml no banco de dados AdventureWorks. Para obter uma visão geral de cada uma dessas colunas, consulte Representação de tipo de dados xml no banco de dados do 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 primeiramente a uma variável do tipo xml. Esse documento contém três exemplos de elementos <ProductDescription>, com cada um deles contendo um elemento filho <DateCreated>.
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:
A estrutura de loop FOR ... WHERE é usada para recuperar o elemento <ProductDescription> que atenda à condição especificada na cláusula WHERE.
A função do construtor dateTime() é usada para construir valores de tipo dateTime para que eles possam ser comparados adequadamente.
A consulta então constrói o XML resultante. Como você está construindo uma seqüê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"/>