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"/>
Vedere anche