Share via


Tür sistemi (XQuery)

Şema türleri için özellikle yazılan bir dili ve türlenmemiş veri weakly yazılan bir dilin XQuery var.Önceden tanımlanmış XQuery türleri şunlardır:

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

Yerleşik bir XML şeması türleri

XML şemasının yerleşik türleri xs önceden tanımlanmış ad alanı öneki var.Bu türlerinden bazıları şunlardır: xs:Integer and xs:dize.Bu yerleşik türleri desteklenir.Bir XML şema koleksiyon oluşturduğunuzda, bu türü kullanabilirsiniz.

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

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

Yazma bu bilgiler, sütun ile ilişkili XML şema koleksiyon tarafından sağlanır.Daha fazla bilgi için bkz:XML veri türü temsili AdventureWorks veritabanındaki.

XPath veri türleri ad alanı içinde tanımlanmış türleri

Tanımlanan türler http://www.w3.org/2004/07/XPath-datatypes sahip olan önceden tanımlanmış bir önek adXDT.Bu türleri için geçerlidir:

  • Bir XML şema koleksiyon oluştururken, bu tür kullanamazsınız.Bu tür XQuery tür sisteminde kullanılan ve kullanılır XQuery ve statik yazma. Atomik türlerine örnek olarak, atama xdt:untypedAtomic, içinde xdt ad alanı.

  • Türlenmemiş XML sorgularken, statik ve dinamik öğe düğümleri türüdür xdt:untyped, ve öznitelik türü xdt:untypedAtomic. Sonucu bir query() yöntem türlenmemiş XML oluşturur. Bu, düğümlerin XML olarak döndürülen anlamına gelir: xdt:untyped ve xdt:untypedAtomic, sırasıyla.

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

Aşağıdaki örnekte, sorgunun karşı türlenmemiş bir XML değişken belirtildi.ifade data(/a[1]), bir atomik değer dizisi verir. The data() işlev returns the typed value of the element <a>. Sorgulanan XML türlenmemiş, döndürülen değer türü olduğundan xdt:untypedAtomic. Bu nedenle, instance of "doğru" sonucunu verir.

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

Ifade (yazılan değeri almak yerine/a[1]) aşağıdaki örnekte, bir dizi döndürür öğesi, öğe <a>. The instance of ifade uses the element test to verify that the value returned by the ifade 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

Yazılan bir XML örnek ve sorguyu, sorguladığınız ifade üst eksen, içeren statik türde bilgileri elde edilen düğüm kullanılabilir.Ancak dinamik hala düğümlerin ile ilişkili türüdür.

Klavyeyle yazılan değeri karşılık.Dize değeri

Her düğüm, yazılı bir değer ve bir dize değeri vardır.Yazılı XML verileri, yazılı değer türü, sütun veya sorgulanan değişkeni ile ilişkilendirilmiş XML şema koleksiyon tarafından sağlanır.XML verileri türlenmemiş yazılan değeri türüdür. xdt:untypedAtomic.

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

Aşağıdaki XML şema koleksiyonunda <root> tamsayı türü öğesi tanımlanır:

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ılan değerini alır. /root[1] ve ardından ekler 3 kendisine.

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

Sonraki örnekte deyimin, çünkü başarısız string(/root[1]) ifade, bir dize türü değeri döndürür. Bu değer yalnızca sayısal tür değerleri olarak, işlenen götüren bir 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ı hesaplar LaborHours öznitelikleri. The data() işlev retrieves the typed values of LaborHours attributes from all the <Location> elements for a product model. Ilişkili XML şemaya göre Instruction sütun LaborHours kullanılır xs:decimal yazın.

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 12.75 sonucu olarak verir.

Not

Açık kullanımını data() Bu örnekte, işlev, yalnızca gösterim amacıyla kullanılır. Belirtilmezse, sum() örtülü olarak uygulanan data() düğümlerin yazılı değerlerini ayıklamak için işlev'ı tıklatın.