Compartilhar via


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 sequê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 AdventureWorks2008R2. Para obter uma visão geral de cada uma dessas colunas, consulte Representação de tipo de dados xml no banco de dados do AdventureWorks2008R2.

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 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

Referência

Conceitos