Aracılığıyla paylaş


Tür sistemi (XQuery)

XQuery şema türleri için türü kesin olarak belirtilmiş bir dil ve untyped veriler için yazılan korunmayan bir dil değildir.XQuery önceden tanımlı türleri şunlardır:

Bu konu aşağıda açıklanmıştır:

Yerleşik xml şema türleri

Yerleşik xml şema xs önceden tanımlanmış ad alaný önekini vardır.Bu türlerin bazıları xs:integer ve xs:dize.Bu yerleşik türleri desteklenir.Bir xml şeması oluşturmak, bu türleri kullanabilirsiniz koleksiyon.

xml sorgulama yazıldığında, statik ve dinamik türü düğümlerin xml şeması tarafından belirlenir koleksiyon sütun veya sorgulanan değişkeni ile ilişkilendirilmiş.Statik ve dinamik türleri hakkında daha fazla bilgi için bkz: İçerik ifade ve sorgu değerlendirme (XQuery).Örneğin, aşağıdaki sorgu belirtilen yazılı bir karşı xml sütun (Instructions).ifade Kullanan instance of doğrulamak için yazılan değeri LotSize döndürülen özniteliğidir xs:decimal türü.

SELECT Instructions.query('
   DECLARE namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
   data(/AWMI:root[1]/AWMI:Location[@LocationID=10][1]/@LotSize)[1] instance of xs:decimal
') AS Result
FROM Production.ProductModel
WHERE ProductModelID=7

Bu yazım bilgileri xml şeması tarafından sağlanan koleksiyon sütun ile ilişkili.Daha fazla bilgi için bkz: XML veri türü temsili AdventureWorks2008R2 veritabanında.

XPath veri türleri ad alanında tanımlanan türleri

Tanımlanan türleri http://www.w3.org/2004/07/xpath-datatypes , önceden tanımlanmış bir önek ad alanınız xdt.Bu türleri için geçerlidir:

  • Bir xml şeması oluştururken bu türleri kullanamazsınız koleksiyon.Bu tür için kullanılan ve XQuery türü sisteminde kullanılan XQuery ve statik yazma.Atomik türleri için örneğin, atama xdt:untypedAtomic, te xdt ad.

  • Untyped xml sorgularken statik ve dinamik öğe düğümlerinin türüdür xdt:untyped, öznitelik değerleri türüdür ve xdt:untypedAtomic.Sonucu, bir query() yöntem oluşturur untyped xml.xml düğümleri verilir, yani xdt:untyped ve xdt:untypedAtomic, sırasıyla.

  • The xdt:dayTimeDuration and xdt:yearMonthDuration types are not supported.

Aşağıdaki örnekte, sorgu karşı türlenmemiş bir xml değişken belirtilir.ifade data(/a[1]), bir dizi bir Atomik değer. verirThe data() function returns the typed value of the element <a>.Sorgulanan xml untyped olduğundan döndürülen deðer türüdür xdt:untypedAtomic.Bu nedenle, instance of döndürür true.

DECLARE @x xml
SET @x='<a>20</a>'
SELECT @x.query( 'data(/a[1]) instance of xdt:untypedAtomic' )

Yazılı değer ifade alma yerine (/a[1]) şu örnekte de bir dizi döndürür öğesi, öğe <a>.The instance of expression uses the element test to verify that the value returned by the expression is an element node of xdt:untyped type.

DECLARE @x xml
SET @x='<a>20</a>'
-- Is this an element node whose name is "a" and type is xdt:untyped.
SELECT @x.query( '/a[1] instance of element(a, xdt:untyped?)')
-- Is this an element node of type xdt:untyped.
SELECT @x.query( '/a[1] instance of element(*, xdt:untyped?)')
-- Is this an element node?
SELECT @x.query( '/a[1] instance of element()')

Not

Ne zaman yazılan bir xml örnek sorguladığınız ve ana sorgu ifade içeren eksen, elde edilen düğüm statik türde bilgileri artık kullanılabilir değil.Ancak, dinamik düğümleri hala ilişkili türüdür.

Yazılı değeri vs.Dize değeri

Her düğüm, yazılı değeri ve bir dize değeri vardır.xml şeması tarafından sağlanan yazılı xml veri için yazılan değerin koleksiyon sütun veya sorgulanan değişkeni ile ilişkilendirilmiş.Untyped xml veri için yazılan değer türüdür xdt:untypedAtomic.

Kullanabileceğiniz data() veya string() işlev bir düğümün değerini almak için:

Aşağıdaki xml şema koleksiyon, <root> Tamsayı türü öğesi tanımlanmış:

CREATE XML SCHEMA COLLECTION SC AS N'
<schema xmlns="http://www.w3.org/2001/XMLSchema">
      <element name="root" type="integer"/>
</schema>'
GO

Aşağıdaki örnekte, ifade ilk yazılı değerini alır /root[1] sonra 3 it. için

DECLARE @x xml(SC)
SET @x='<root>5</root>'
SELECT @x.query('data(/root[1]) + 3')

Sonraki örnekte, ifade, çünkü başarısız string(/root[1]) ifade verir bir dize türü değeri.Bu değer yalnızca sayısal tür değerleri olarak İşlenenlerini götüren aritmetik işleç geçirilir.

-- Fails because the argument is string type (must be numeric primitive type).
DECLARE @x xml(SC)
SET @x='<root>5</root>'
SELECT @x.query('string(/root[1]) + 3')

Aşağıdaki örnek toplamını hesaplar LaborHours öznitelikleri.The data() function retrieves the typed values of LaborHours attributes from all the <Location> elements for a product model.İlişkili xml şemaya göre Instruction , sütun LaborHours biri olan xs:decimal türü.

SELECT Instructions.query(' 
DECLARE namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"; 
             sum(data(//AWMI:Location/@LaborHours)) 
') AS Result 
FROM Production.ProductModel 
WHERE ProductModelID=7

Bu sorgu, sonuç olarak 12.75 döndürür.

Not

Açık kullanımını data() işlev yalnızca gösterim Bu örnekte olduğu.Belirtilmezse, sum() örtülü olarak uygulanır data() için işlev ayıklamak yazılı değerleri düğümler.

Ayrıca bkz.

Diğer Kaynaklar