Condividi tramite


Funzioni costruttore (XQuery)

Le funzioni costruttore creano istanze di un qualsiasi tipo atomico XSD predefinito o definito dall'utente a partire da un input specificato.

Sintassi


            TYP($atomicvalue as xdt:anyAtomicType?
            
            ) as TYP?
        

Argomenti

  • $strval
    Stringa che verrà convertita.

  • TYP
    Qualsiasi tipo XSD predefinito.

Osservazioni

Le funzioni costruttore sono supportate per i tipi atomici XSD di base e derivati. I sottotipi di xs:duration, che include xdt:yearMonthDuration e xdt:dayTimeDuration, xs:QName, xs:NMTOKEN e xs:NOTATION non sono supportati. Sono inoltre disponibili i tipi atomici definiti dall'utente contenuti nelle raccolte di schemi associate, a condizione che siano derivati direttamente o indirettamente dai tipi seguenti.

Tipi di base supportati

Di seguito sono elencati i tipi di base supportati:

  • 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

Tipi derivati supportati

Di seguito sono elencati i tipi derivati supportati:

  • 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 supporta inoltre l'elaborazione delle costanti in fase di compilazione per le chiamate di funzioni costruttore, come indicato di seguito:

  • Se l'argomento è un valore letterale stringa, l'espressione verrà valutata in fase di compilazione. Quando il valore non soddisfa i vincoli di tipo, viene generato un errore statico.

  • Se l'argomento è un valore letterale di un altro tipo, l'espressione verrà valutata in fase di compilazione. Quando il valore non soddisfa i vincoli di tipo, viene restituita la sequenza vuota.

Esempi

In questo argomento vengono forniti esempi di utilizzo del linguaggio XQuery sulle istanze XML archiviate in diverse colonne di tipo xml nel database AdventureWorks2008R2. Per una panoramica su ognuna di queste colonne, vedere Rappresentazione del tipo di dati XML nel database AdventureWorks2008R2.

A. Utilizzo della funzione XQuery dateTime() per recuperare descrizioni di prodotto non recenti

Nell'esempio seguente un documento XML di esempio viene assegnato a una variabile di tipo xml. Il documento contiene tre elementi <ProductDescription> di esempio, ognuno dei quali contiene un elemento figlio <DateCreated>.

Viene quindi eseguita una query sulla variabile per recuperare le descrizioni di prodotto create prima di una data specifica. Ai fini del confronto, la query utilizza la funzione costruttore xs:dateTime() per tipizzare le date.

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] ) } )
        }
 ')

Dalla query precedente si noti quanto segue:

  • La struttura del ciclo FOR ... WHERE è utilizzata per recuperare l'elemento <ProductDescription> che soddisfa la condizione specificata nella clausola WHERE.

  • La funzione costruttore dateTime() è utilizzata per costruire tipi di valore dateTime in modo che sia possibile il confronto.

  • La query genera quindi il codice XML risultante. Poiché si sta creando una sequenza di attributi, nella costruzione di strutture XML vengono utilizzate virgole e parentesi.

Risultato:

<Product 
   ProductID="1" 
   DateCreated="2000-01-01T00:00:00Z"/>