Ifade içerik ve Query değerlendirme (XQuery)
Bir ifade bağlamında analiz etmek ve bunu değerlendirmek için kullanılan bilgilerdir.XQuery değerlendirildiği iki aşamada şunlardır:
Statik içerik – Bu, sorgunun derleme aşaması.Kullanılabilir bilgilere dayanarak hataları bazen statik bu sorguyu çözümleme sırasında geçirilen.
Dinamik içerik – Bu, sorgu yürütme aşaması.Sorgu, sorgu derleme sırasındaki hata gibi statik hata olsa bile, sorgu, yürütme sırasında hata döndürebilir.
Statik içerik
Statik içerik başlatma birlikte statik çözümlenmesi için tüm bilgileri yerleştirme işlemi başvurduğu ifade.Statik içerik başlatma bir parçası olarak, aşağıdaki tamamlandı:
The boundary white space policy is set to strip.Bu nedenle, sınır boşluk tarafından korunmazany elementveattributeKurucular sorgu.Örneğin:
declare @x xml set @x='' select @x.query('<a> {"Hello"} </a>, <b> {"Hello2"} </b>')
Bu sorgu aşağıdaki sonucu verir, bu sınırı alanı XQuery çözümlenmesi sırasında hemen çıkarılır çünkü ifade:
<a>Hello</a><b>Hello2</b>
Önek ve ad bağlama aşağıdakileri başlatılır:
Bir dizi önceden tanımlanmış ad.
İLE XMLNAMESPACES kullanılarak tanımlanmış bir ad.Daha fazla bilgi için bkz:XMLNAMESPACES Namespaces kullanarak ekleme).
Sorgu giriş tanımlanan bir ad.Not giriş, ad alanı bildirim ile XMLNAMESPACES ad alanı bildiriminde kılabilir.Örneğin, aşağıdaki sorguda, bu ad alanına (http://someURI) bağlar bir önek (pd) ile XMLNAMESPACES bildirir.Ancak, WHERE yan tümce, sorgunun giriş bağlama geçersiz kılar.
WITH XMLNAMESPACES ('http://someURI' AS pd) SELECT ProductModelID, CatalogDescription.query(' <Product ProductModelID= "{ sql:column("ProductModelID") }" /> ') AS Result FROM Production.ProductModel WHERE CatalogDescription.exist(' declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription"; /pd:ProductDescription[(pd:Specifications)]' ) = 1
Bu ad bağların statik içerik başlatma sırasında çözümlenir.
Yazılı bir sorgulamaxmlsütun veya değişken, sütun veya değişkeni ile ilişkilendirilmiş XML şema koleksiyon bileşenleri statik içerik. alınırDaha fazla bilgi için bkz:Klavyeyle yazılan XML Untyped XML'YE karşılaştırılması.
Her atomik türü için içe aktarılmış şemalardaki çevrim işlev de statik içeriğinde kullanılabilir.Bu, aşağıdaki örnekte gösterilmiştir.Bu örnekte, sorguda belirtilen bir yazılı karşıxmldeğişken.Bu değişkeni ile ilişkilendirilmiş XML şema koleksiyon myType bir atomik türünü tanımlar.Bu tür bir çevrim işlev için CorrespondingmyType()kullanılabilir sırasında statik analiz.Sorgu ifade ( ns:myType(0)) myType. bir değer verir
-- DROP XML SCHEMA COLLECTION SC -- go CREATE XML SCHEMA COLLECTION SC AS '<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="myNS" xmlns:ns="myNS" xmlns:s="https://schemas.microsoft.com/sqlserver/2004/sqltypes"> <import namespace="https://schemas.microsoft.com/sqlserver/2004/sqltypes"/> <simpleType name="myType"> <restriction base="int"> <enumeration value="0" /> <enumeration value="1"/> </restriction> </simpleType> <element name="root" type="ns:myType"/> </schema>' go DECLARE @var XML(SC) SET @var = '<root xmlns="myNS">0</root>' -- specify myType() casting function in the query SELECT @var.query('declare namespace ns="myNS"; ns:myType(0)')
Çevrim işlev için aşağıdaki örnekteintyerleşik XML türü belirtilen ifade.
declare @x xml set @x = '' select @x.query('xs:int(5)') go
Statik içerik başlatıldıktan sonra sorgu ifade analiz (derlenmiş).Statik analiz aşağıdakileri içerir:
Sorgu ayrıştırma.
Belirtilen işlev ve tür adları çözümleme ifade.
Statik sorguyu yazmak.Bu sorgu türünü güvenli olmasını sağlar.Örneğin, aşağıdaki sorgu bir statik hata verir, çünkü**+** işleç sayısal temel tür bağımsız değişkenleri gerektirir:
declare @x xml set @x='' SELECT @x.query('"x" + 4')
Aşağıdaki örnekte,value()operatör gerektiren bir tek.XML şemasında belirtilen olabilir birden çok<Elem>öğeleri.İfadenin statik analiz türü güvenli olduğunu ve statik bir hata olduğunu belirler.Hatayı gidermek için ifade tek açıkça belirtmek için yazılmış gerekir ( data(/x:Elem)[1]).
DROP XML SCHEMA COLLECTION SC go CREATE XML SCHEMA COLLECTION SC AS '<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="myNS" xmlns:ns="myNS" xmlns:s="https://schemas.microsoft.com/sqlserver/2004/sqltypes"> <import namespace="https://schemas.microsoft.com/sqlserver/2004/sqltypes"/> <element name="Elem" type="string"/> </schema>' go declare @x xml (SC) set @x='<Elem xmlns="myNS">test</Elem><Elem xmlns="myNS">test2</Elem>' SELECT @x.value('declare namespace x="myNS"; data(/x:Elem)[1]','varchar(20)')
Daha fazla bilgi için bkz:XQuery ve statik yazma.
Uygulama kısıtlamaları
Statik bağlama ilgili sınırlamalar şunlardır:
XPath uyumluluk modu desteklenmiyor.
XML Yapım için yalnızca şeridi oluşturma modu desteklenmiyor.Bu, varsayılan ayardır..Nedenle, oluşturulan öğe düğümü türü isexdt:untypedtürü ve özniteliklerinin olanxdt:untypedAtomicyazın.
Yalnızca sipariş edilen sipariş modunda desteklenir.
Yalnızca XML boşluk İlkesi şerit desteklenir.
Taban URI işlevi desteklenmiyor.
fn:doc() desteklenmiyor.
fn:collection() desteklenmiyor.
XQuery statik flagger sağlanır.
İlişkili harmanlamaxmlveri türü kullanılır.Bu harmanlama her zaman Unicode codepoint harmanlama için küme.
Dinamik içerik
Dinamik içerik ifade yürütüldüğünde saat kullanılabilir olması gereken bilgileri gösterir.Statik içerik ek olarak, aşağıdaki bilgileri dinamik içeriğin bir parçası olarak başlatılır:
İçerik gibi ifade odağı öğe, içerik konumu ve içerik boyutu aşağıdaki gösterildiği gibi başlatılır.Bu değerler tarafından geçersiz kılınabilir NotNodes() yöntem.
The xml data type sets the context item, the node being processed, to the document node.
Bağlam konumu, göreceli olarak işlenen, düğüm bağlama öğesinin konumu, önce 1 olarak küme.
Her zaman bir belge düğümü olduğundan içerik boyutu, sırada işlenmekte olan maddelerin ilk 1 olarak küme.
Uygulama kısıtlamaları
Dinamik içerik için ilgili sınırlamalar şunlardır:
The Current date and time context functions, fn:current-date, fn:current-time, and fn:current-dateTime, are not supported.
The implicit timezone is fixed to UTC+0 and cannot be changed.
The fn:doc() function is not supported.Tüm sorgular yürütülen karşıxmlsütun türü veya değişken.
The fn:collection() function is not supported.