Aracılığıyla paylaş


XQuery türü çevrim kuralları

XPath 2.0 işlevler ve işleçler ve XQuery 1.0 W3C özellikleri Aşağıdaki diyagramda, yerleşik veri türlerini gösterir.Bu yerleşik ilkel ve yerleşik türetilen türler içerir.

XQuery 1.0 tür hiyerarşisi

Bu konu, bir türden diğerine aşağıdaki yöntemlerden birini kullanarak vuran uygulanır türüne çevrim kuralları açıklar:

  • Açık, vuran, bunun cast olarak veya tür oluşturucu işlevleri (örneğin, xs:integer("5")).

  • Örtülü tür atama türü yükseltme sırasında oluşur

Açık çevrim

Aşağıdaki tablo yerleşik basit türler arasında izin verilen çevrim özetlenmektedir.

XQuery için tür atama kurallarını anlatır.

  • Yerleşik bir temel türün kuralları temel alan başka bir yerleşik temel öğe türüne çevirebilirsiniz tablo.

  • Bu ilkel türden türetilmiş herhangi bir türü için bir temel türün çevrilebilir.Örneğin, gelen çevirebilirsiniz xs:decimal için xs:integer, ya da xs:decimal için xs:long.

  • Türetilmiş bir tür olan herhangi bir türüne çevirebilirsiniz, üst türü hiyerarşisinde gelinceye kadar kendi yerleşik temel taban türü.Örneğin, gelen çevirebilirsiniz xs:token için xs:normalizedString mi xs:dize.

  • Türetilmiş bir tür için bir temel türün çevrilebilir için ilkel önceki halini kendi artığını, hedef türü.Örneğin, tonunu xs:integer, bir çok türü, türetilmiş bir xs:dize, ilkel, yazın, çünkü xs:decimal, xs:integeriçin artığını, ilkel üst 's xs:dize.

  • Türetilmiş bir tür ilkel kaynak türü, başka bir türetilen türe çevrilebilir üst için hedef türü 's primitive artığını üst.Örneğin, gelen çevirebilirsiniz xs:integer için xs:token, dan artığını çünkü xs:decimal için xs:dize.

  • Kullanıcı tanımlı türler için yerleşik türleri vuran kurallarını yerleşik türleri aynıdır.Örneğin, tanımlama bir myInteger ondan türetilmiş tür xs:integer türü.Daha sonra myInteger için artığını xs:token, çünkü xs:decimal için artığını xs:dize.

Çevrim aşağıdaki türleri desteklenir:

  • Çevrim için ya da liste türleri verilmez.Bu, hem kullanıcı tanımlı liste türleri ve yerleşik liste türleri gibi içerir xs:IDREFS, xs:ENTITIES, ve xs:NMTOKENS.

  • Uygulamaya veya bu uygulamadan vuran xs:QName desteklenmiyor.

  • Xs:NOTATION ve tam olarak sipariş edilen alt türlerinden, süre, xdt:yearMonthDuration ve xdt:dayTimeDuration, desteklenmez.Sonuç olarak, çevrim için ya da bu tür desteklenmiyor.

Aşağıdaki örnekler, açık tür atama göstermektedir.

Örnek a

Aşağıdaki örnek, bir xml türü değişkeni sorgular.Bir basit tür değeri bir dizi xs:dize yazılan sorgu döndürür.

declare @x xml
set @x = '<e>1</e><e>2</e>'
select @x.query('/e[1] cast as xs:string?')
go

Örnek b

Yazılı xml değişkeni aşağıdaki örnek sorgular.Bir xml şeması ilk örnek oluşturur koleksiyon.Daha sonra xml şemasını kullanır koleksiyon yazılı xml değişken oluşturmak için.Şema değişkenine atanan xml örnek için yazım bilgileri sağlar.Sorguların ardından karşı değişken belirtilir.

create xml schema collection myCollection as N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="root">
            <xs:complexType>
                  <xs:sequence>
                        <xs:element name="A" type="xs:string"/>
                        <xs:element name="B" type="xs:string"/>
                        <xs:element name="C" type="xs:string"/>
                  </xs:sequence>
            </xs:complexType>
      </xs:element>
</xs:schema>'
go

Aşağıdaki sorgu bir statik hata verir, ne kadar üst düzey biliyor musunuz çünkü <root> öğeleri olan belge örnek.

declare @x xml(myCollection)
set @x = '<root><A>1</A><B>2</B><C>3</C></root>
          <root><A>4</A><B>5</B><C>6</baz></C>'
select @x.query('/root/A cast as xs:string?')
go

Bir singleton belirterek <root> öğesi, ifade, sorgu başarılı.Bir basit tür değeri bir dizi xs:dize yazılan sorgu döndürür.

declare @x xml(myCollection)
set @x = '<root><A>1</A><B>2</B><C>3</C></root>
              <root><A>4</A><B>5</B><C>6</C></root>'
select @x.query('/root[1]/A cast as xs:string?')
go

Aşağıdaki örnekte, xml türü değişkeni xml şema belirtir bir belge anahtar sözcüğünü içeren koleksiyon.Bu xml örnek tek bir üst düzey öğeye sahip bir belge olması gerektiğini gösterir.İki oluşturursanız, <root> xml öðeleri örnek, bunu bir hata döndürür.

declare @x xml(document myCollection)
set @x = '<root><A>1</A><B>2</B><C>3</C></root>
              <root><A>4</A><B>5</B><C>6</C></root>'
go

örnek tek bir üst düzey öğesi ve sorgu works içerecek şekilde değiştirebilirsiniz.Yine, bir basit tür değeri bir dizi xs:dize yazılan sorgu döndürür.

declare @x xml(document myCollection)
set @x = '<root><A>1</A><B>2</B><C>3</C></root>'
select @x.query('/root/A cast as xs:string?')
go

Örtülü tür atama

Kapalı çevrim yalnızca sayısal türler ve untyped Atomik türleri için izin verilir.Örneğin, aşağıdaki MIN() işlev en az iki değer döndürür:

min(xs:integer("1"), xs:double("1.1"))

Bu örnekte, iki değerleri geçirilen içinde için XQuery MIN() işlev farklı türleri şunlardır.Bu nedenle, örtük dönüştürme gerçekleştirilir nerede Tamsayı türü için yükseltilmiş çift ve iki çift değerleri karşılaştırılır.

Bu örnekte açıklandığı gibi tür promosyon şu kuralları uygular:

  • Bir yerleşik türetilmiş bir sayısal tür temel türüne yükseltilebilir.Örneğin, tamsayý için yükseltilmiş olabilir Ondalık.

  • A Ondalık için yükseltilmiş olabilir float, ve bir float için yükseltilmiş olabilir çift.

Örtülü tür atama sayısal türleri için izin verildiğinden aşağıdaki izin verilmez:

  • Kapalı çevrim dize türleri için izin verilmez.Örneğin, iki, dize türler beklenen ve ilettiğiniz bir dize ve bir token, hiçbir kapalı çevrim gerçekleşir ve bir hata döndürdü.

  • Sayısal türlerinden kapalı çevrim dize türleri için izin verilmez.Örneğin bir tamsayı türü değeri geçmesi, bir işlev yani hiçbir kapalı çevrim gerçekleşir bir dize türü parametresi bekleniyor ve bir hata döndürülür.

Değerleri çevrim

Bir türden diğerine vuran, gerçek değerleri hedef türü değer alanı için kaynak türü değerini alan dönüştürülür.Örneğin, bir xs:double bir xs:decimal gelen çevrim çift baytlı değer ondalık değer dönüşümü.

Dönüştürme kurallarını bazıları şunlardır.

Değer bir dize veya untypedAtomic türden vuran

Bir dize veya untypedAtomic türü tonunu değeri doğrulama kurallarına göre hedef türü değeri olarak aynı şekilde dönüştürülür.Bu ileride desen ve boşluk işleme kuralları içerir.Örneğin, aşağıdaki başarılı ve çift bir değer üretmek 1.1e0:

xs:double("1.1")

Xs:base64Binary veya xs:hexBinary gibi ikili türleri için bir dize veya untypedAtomic türden vuran, giriş değerleri base64 veya onaltılık kodlanmış, sırasıyla olması gerekir.

Değer bir dize veya untypedAtomic türüne çevrim

Bir dize veya untypedAtomic vuran türü kendi XQuery kurallı sözlü sunumu değerine dönüştürür.Özellikle, bu belirli bir desene ya da başka bir kısıtlamayı giriş sırasında obeyed bir değere göre bu kısıtlamayı temsil edilmeyen anlamına gelebilir.Kullanıcıları bu konuda bilgilendirmek için SQL Server burada tür kısıtlaması olabilir bir sorun bu tip şemasına yüklendiğinde uyarı sağlayarak türleri flags koleksiyon.

Bir değer türü xs:float veya xs:double ya da herhangi bir dize veya untypedAtomic türüne kendi alt türlerinden birini vuran zaman değeri bilimsel gösterimde temsil edilir.Bu değerin mutlak değeri 1'den küçük.0e olduğunda yapılır-6, veya sıfırdan büyük veya eşit 1.0e6.Bu bilimsel 0.0e0 için 0 sıralandığını anlamına gelir.

Örneğin, xs:string(1.11e1) dize değerini döndürür "11.1", while xs:string(-0.00000000002e0) dize değerini döndürür "-2.0E-11".

Xs:base64Binary veya bir dize veya untypedAtomic türüne xs:hexBinary gibi ikili türleri vuran ikili değerleri kendi base64 temsil veya kodlanmış form, sırasıyla onaltılı.

Sayısal tür değerine çevrim

Çevrim türünde bir sayısal bir değeri başka bir sayısal türdeki bir değer olduğunda, değeri bir değer alan için diğer dize seri hale getirme gitmeden eşleştirilir.Değer bir hedef türü kısıtlamasını karşılamıyor, aşağıdaki kurallar geçerlidir:

  • Değer negatif ise kaynak zaten sayısal değerdir ve hedef türü xs:float veya alt -INF veya INF değerleri sağlayan bir tür teknisyene çevrim kaynak sayısal değerin bir taşma alanında olacak ise, değer için pozitif bir değer ise INF veya -INF eşleşir.Hedef türü INF veya -INF izin vermez ve bir taşma ortaya çıkabilecek, cast başarısız olur ve sql Server'ın bu sürümdeki boş sırası sonucudur.

  • Kaynak zaten sayısal değerdir ve hedef türü 0 içeren bir sayısal tür ise, - 0e0 0e0 kabul edilen değer aralık, ve kaynak sayısal değerin çevrim veya içinde bir Yetersizlik durumu neden, değeri aşağıdaki şekilde eşleştirilir:

    • Değer ondalık hedef türü için 0 eşleştirilir.

    • Değer negatif bir Yetersizlik durumu olduğunda değeri-0e0 eşleştirilir.

    • Değer pozitif bir Yetersizlik durumu float veya double hedef türü için olduğunda değeri için 0e0 eşleştirilir.

    Hedef türü, değer alanda sıfır içermiyorsa, cast başarısız olur ve boş sırası sonucudur.

    Kayan nokta türü, xs:float, xs:double veya bunların alt türlerinden herhangi biri gibi bir ikili değerine vuran duyarlık kaybedebilirsiniz unutmayın.

Uygulama kısıtlamaları

Sınırlamalar şunlardır:

  • Kayan nokta değeri NaN desteklenmiyor.

  • Castable değerleri hedef türler uygulama kısıtlamaları tarafından kısıtlanmıştır.Örneğin, bir tarih atanamaz dize için negatif bir yıl xs:date.Çalışma zamanında değeri sağlanmışsa bu tür yayınları boş sırayla neden olur saat (run - yükseltme yerinesaat hata).

Ayrıca bkz.

Kavramlar