Oluşturucu İşlevleri (XQuery)

Şunlar için geçerlidir: SQL Server

Belirli bir girdiden, yapıcı fonksiyonlar XSD yerleşik veya kullanıcı tanımlı atomik tiplerden herhangi birinin örneklerini oluşturur.

Syntax

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

Arguments

$strval
Dönüştürülecek bir ip.

TYP
Herhangi bir dahili XSD türü.

Remarks

Yapıcılar, temel ve türemiş atomik XSD türleri için desteklenir. Ancak, xdt:yearMonthDuration ve xdt:dayTimeDuration ile xs:QName, xs:NMTOKEN ve xs:NOTATION gibi xs:duration alt türleri desteklenmemektedir. İlgili şema koleksiyonlarında bulunan kullanıcı tanımlı atom tipleri de doğrudan veya dolaylı olarak aşağıdaki türlerden türetildikleri sürece mevcuttur.

Desteklenen baz tipleri

Desteklenen taban tipleri şunlardır:

  • xs:string

  • xs:boolean

  • xs:ondalık

  • xs:float

  • xs:double

  • xs:süre

  • xs:dateTime

  • xs:time

  • xs:date

  • xs:gYearMonth

  • xs:gYear

  • xs:gMonthDay

  • xs:gDay

  • xs:gMonth

  • xs:hexBinary

  • xs:base64Binary

  • xs:anyURI

Desteklenen Türemiş Tipler

Desteklenen türeme türleri şunlardır:

  • xs:normalizedString

  • xs:token

  • xs:dil

  • xs:Adı

  • xs:NCName

  • xs:ID

  • xs:IDREF

  • xs:ENTITY

  • xs:tamsayı

  • xs:nonPositiveInteger

  • xs:negativeInteger

  • xs:long

  • xs:int

  • xs:short

  • xs:byte

  • xs:nonNegativeInteger

  • xs:unsignedLong

  • xs:unsignedInt

  • xs:unsignedShort

  • xs:imzasızBayt

  • xs:positiveInteger

SQL Server ayrıca fonksiyon oluşturma çağrıları için sürekli katlamayı aşağıdaki şekillerde destekler:

  • Eğer argüman bir string literal ise, ifade derleme sırasında değerlendirilir. Değer tür kısıtlamalarını karşılamadığında, statik bir hata oluşur.

  • Eğer argüman başka bir türde bir literal ise, ifade derleme sırasında değerlendirilir. Değer tür kısıtlamalarını karşılamadığında, boş dizi döner.

Examples

Bu konu, AdventureWorks veritabanındaki çeşitli xml türü sütunlarında depolanan XML örneklerine karşı XQuery örnekleri sağlar.

A. dateTime() XQuery fonksiyonunu kullanarak eski ürün tanımlarını elde etmek

Bu örnekte, örnek bir XML belgesi önce bir xml tür değişkenine atanır. Bu belge, her biri bir <DateCreated> alt öğe içeren üç örnek <ProductDescription> öğe içerir.

Değişken daha sonra yalnızca belirli bir tarihten önce oluşturulmuş ürün açıklamalarını almak için sorgulanır. Karşılaştırma amacıyla, sorgu tarihleri yazmak için xs:dateTime() yapıcı fonksiyonunu kullanır.

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

Önceki sorgudan aşağıdakilere dikkat edin:

  • FOR ... WHERE döngü yapısı, WHERE maddesinde belirtilen koşulu sağlayan ProductDescription> öğesini almak <için kullanılır.

  • dateTime() yapıcı fonksiyonu, dateTime türü değerleri oluşturmak için kullanılır, böylece bunlar uygun şekilde karşılaştırılabilir.

  • Sorgu daha sonra ortaya çıkan XML'i oluşturur. Bir öznitelik dizisi oluşturduğunuz için, XML yapısında virgül ve parantez kullanılır.

Sonuç şu şekildedir:

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