Aracılığıyla paylaş


XQuery türü döküm kuralları

Aşağıdaki W3C XQuery 1.0 ve XPath 2.0 işlevler ve işleçler belirtme Diyagram, 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, zaman bir türünden diğerine döküm aşağıdaki yöntemlerden biri kullanılarak uygulanan türü döküm kuralları açıklar:

  • Bu döküm açık kullanarak bunu dökme olarak veya tür Oluşturucu işlevleri (örneğin, xs:integer("5")).

  • Örtülü döküm türü promosyon sırasında oluşur.

Açık döküm

Aşağıdaki tabloda, yerleşik basit türler arasında izin verilen tür çarpıtma özetlenmektedir.

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

  • Yerleşik basit tür tablo kurallarına göre başka bir yerleşik ilkel türüne çevirebilirsiniz.

  • Basit tür o ilkel türünden türetilen herhangi bir türüne çevirebilirsiniz. Örneğin, artığını xs: decimal için XS, veya xs: decimal için xs:long.

  • Türetilmiş bir tür yerleşik ilkel taban türünü tüm yol kadar türü hiyerarşisinde onun atası olan herhangi bir türüne çevirebilirsiniz. Örneğin, artığını xs:token için xs:normalizedString veya XS.

  • Eğer onun ilkel atası hedef türüne çevirebilirsiniz türetilmiş bir tür ilkel bir türüne çevirebilirsiniz. Örneğin, artığını XS, bir türü için türetilmiş bir XS, ilkel yazın, çünkü xs: decimal, XSilkel atası 's, için döküm XS.

  • Eğer kaynak türünün ilkel atası için hedef türü'nın ilkel atası artığını türetilmiş bir tür başka bir türetilen türe çevirebilirsiniz. Örneğin, artığını XS için xs:token, dan artığını çünkü xs: decimal için XS.

  • Kullanıcı tanımlı türler için yerleşik türleri döküm için kuralları yerleşik türleri ile aynıdır. Örneğin, sen-ebilmek tanımlamak a myInteger türü türetilen XS türü. Sonra myInteger için döküm xs:token, çünkü xs: decimal için döküm XS.

Döküm aşağıdaki türleri desteklenir:

  • Döküm veya liste türleri için izin verilmez. Bu kullanıcı tanımlı liste türleri ve yerleşik liste türleri içerir gibi xs:IDREFS, xs:ENTITIES, ve xs:NMTOKENS.

  • E ya da döküm QNamesendikaya desteklenmiyor.

  • xs:NOTATION ve süresi, tam sipariş alt xdt:yearMonthDuration ve xdt:dayTimeDuration, desteklenmez. Bunun sonucunda, döküm için veya bu tür desteklenmiyor.

Aşağıdaki örnekler, açık tip döküm göstermektedir.

Örnek a

Aşağıdaki örnek, bir xml türü değişkeni sorgular. Bir basit tür değer dizisi XS 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

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

Örnek b

Aşağıdaki örnek, yazılı xml değişkeni sorgular. Örneğin, bir xml şema koleksiyonu ilk oluşturur. Ardından, yazılı xml değişkeni oluşturmak için xml şema koleksiyonu kullanır. Şema değişkenine atanan xml örneği için yazım bilgileri sağlar. Sorgularını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

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

Çünkü ne kadar üst düzey bilmiyorum, statik bir hata, aşağıdaki sorgu döndürür <root> unsurlar belge örneği.

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

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

Tek belirterek <root> ifade öğesinde, sorgu başarılı olur. Bir basit tür değer dizisi XS 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

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 şema koleksiyonu belirtir bir belge anahtar kelime için xml türü değişkeni içerir. Bu, xml örneği tek bir üst düzey öğeye sahip bir belge olması gerektiğini belirtir. Eğer iki oluşturmak <root> öğeleri xml örneği bir hata döndürecektir.

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

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

Örneği tek bir üst düzey öğe ve sorgu çalışmaları içerecek şekilde değiştirebilirsiniz. Yine, bir basit tür değer dizisi XS 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

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

Örtülü tür atama yalnızca sayısal türleri ve yazılmamış atomik türleri için izin verilir. Örneğin, aşağıdaki MIN() işlevi iki değerden en küçüğünü:

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

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

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

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

  • Türetilmiş bir yerleşik sayısal tür için taban türü terfi. Örneğin, Tamsayı yükseltilmesi ondalık.

  • A ondalık yükseltilmesi float, ve bir kayan nokta yükseltilmesi çift.

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

  • Örtülü tür atama dize türleri için izin verilmez. Örneğin, eğer iki dize türleri bekleniyor ve de geçmek bir dize ve bir token, örtülü bir döküm oluşur ve bir hata döndürülür.

  • Örtülü tür atama sayısal türlerinden dize türleri için izin verilmez. Örneğin, bir tamsayı türü bir dize türü parametresi bekleniyor bir işleve geçirdiğinizde hiçbir örtülü tür atama oluşur ve bir hata döndürülür.

Döküm değerleri

Zaman başka bir türden diğerine döküm, 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, döküm bir xs: decimal den bir xs: double için bir çift değeri ondalık değer dönüşümü olacaktır.

Aşağıda dönüşüm kuralları vardır.

Değer bir dize veya untypedAtomic türden vuran

Değer bir dize veya untypedAtomic türüne atıldı, hedef türü'nın kurallarına göre değeri doğrulama olarak aynı şekilde dönüştürülür. Bu nihai desen ve boşluk işleme kurallarını içerir. Örneğin, aşağıdaki başarılı ve bir çift değer oluşturmak 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ürden vuran

Bir dize veya untypedAtomic döküm türü onun XQuery kurallı sözlü sunumu değerine dönüştürür. Özellikle, bu belirli bir desene ya da diğer kısıtlama giriş sırasında itaat değer bu kısıtlamayı göre temsil değil anlamına gelebilir. Kullanıcıları bu konuda bilgilendirmek için SQL Serverburada tür kısıtlaması olabilir sorun bu tip şema koleksiyon yüklendiğinde uyarı sağlayarak türleri bayrakları.

Değer türü xs: float, xs: Double veya bir dize veya untypedAtomic türüne, kendi alt türlerinden herhangi birini vuran zaman değeri bilimsel gösterimde temsil edilir. Yalnızca değerin mutlak değeri az 1.0E ise bu yapılır-6, ya da daha büyük veya eşit 1.0e6. Bu, 0 0.0e0 için bilimsel gösterimde serileştirilir anlamına gelir.

Örneğin, xs:string(1.11e1)dize değeri dönecektir "11.1", süre xs:string(-0.00000000002e0)dize değeri dönecektir "-2.0E-11".

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

Bir sayısal tür değer vuran

Ne zaman bir tür sayısal bir değeri başka bir sayı türü değer vuran, değeri bir değer alan 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 ya da alt bunların -INF veya INF değerleri sağlayan döküm kaynak sayısal değerin bir taşma alanında neden ise, değer değeri pozitifse INF veya -INF eşleştirilir. Hedef türü INF veya -INF, izin vermez ve taşma oluşacak, cast başarısız olur ve SQL Server'ın bu sürümü sonucu boş sırası.

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

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

    • Değer negatif 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 alanı 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ğer vuran duyarlık kaybedebilirsiniz unutmayın.

Uygulama kısıtlamaları

Bu sınırlamalar şunlardır:

  • Kayan nokta değeri NaN desteklenmiyor.

  • Kalıplabilir değerleri hedef türleri uygulama kısıtlamaları tarafından kısıtlanmıştır. Örneğin, bir tarih dizesi ile olumsuz bir yıl döküm olamaz xs:date. Değeri (yerine çalışma zamanı hata yükseltme) zamanında sağlanırsa bu tür yayınları boş sırası içinde sonuçlanır.

Ayrıca bkz.

Kavramlar

Seri hale getirme xml veri tanımlama