İçerik ifade ve sorgu 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şamaları şunlardır:
Statik içerik – bu sorgu derleme aşamasıdır.Hatalar üzerinde mevcut olan bilgilere dayalı olarak, bu statik analiz sorgu sırasında bazen üretilir.
Dinamik içerik – sorgu yürütme aşama budur.Bir sorguyu sorgu derleme sırasındaki hata sayısı gibi herhangi bir statik hata olsa bile, sorgu yürütmesi sırasında hata döndürebilir.
Statik içerik
Statik içerik başlatma için tüm bilgileri statik analiz ifadenin bir araya getirme işlemini ifade eder.Statik içerik başlatmanın bir parçası olarak aşağıdaki tamamlanır:
The boundary white space policy is set to strip.Bu nedenle, sınır boşluk tarafından korunmaz any element ve attribute Kurucular sorgu.Örneğin:
declare @x xml set @x='' select @x.query('<a> {"Hello"} </a>, <b> {"Hello2"} </b>')
Sınır koyma XQuery ifade Ayrıştırma sırasında yapılandırıldıktan çünkü bu sorgu aşağıdaki sonucu verir:
<a>Hello</a><b>Hello2</b>
Ön ek ve ad bağlama için aşağıdaki başlatılır:
Önceden tanımlanmış ad alanları küme.
Tüm ad alanları ile xmlnamespaces kullanarak tanımlanan.Daha fazla bilgi için bkz: İLE xmlnamespaces Namespaces kullanarak ekleme).
Sorgu önsöz'de tanımlanan herhangi bir ad.Not ad alanı bildirim ile xmlnamespaces içindeki ad alanı bildirim önsöz'de kılabilir.Örneğin, aşağıdaki sorguda ile xmlnamespaces (http://someURI) ad alanına bağlayan bir önek (pd) bildirir.Ancak, where yan tümce tümce tümcesinde sorgu önsöz 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 alanı bağların statik içerik başlatma sırasında çözümlenir.
Yazılı bir sorgulama, xml sütun veya değişken, xml şeması bileşenleri koleksiyon sütun veya değişkeni ile ilişkilendirilmiş statik içerik. alınırDaha fazla bilgi için bkz: Yazılı xml Untyped xml karşılaştırılması.
Alınan şemalar Atomik her türü için çevrim işlev de statik içeriğin kullanılabilir yapılır.Bu, aşağıdaki örnekte gösterilmiştir.Bu örnekte, sorguda belirtilen bir yazılı karşı xml değişkeni.xml şema koleksiyon bu ile ilişkili bir Atomik türü myType değişken tanımlar.Bir çevrim işlev bu tipine karşılık gelen myType(), kullanılabilir sırasında statik analiz.Sorgu ifade (ns:myType(0)) myType. değerini döndürür
-- 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)')
Aşağıdaki örnekte, çevrim işlev için int yerleşik xml türü belirtilen ifade.
declare @x xml set @x = '' select @x.query('xs:int(5)') go
Statik bağlama başlatıldıktan sonra sorgu ifade analiz (derlenmiş).Statik analiz aşağıdakileri kapsar:
Sorgu ayrıştırma.
Belirtilen işlev ve tür adları çözümleme ifade.
Statik sorgusu yazarak.Bu sorgu türü güvenli olduğundan emin olur.Örneğin, aşağıdaki sorgu bir statik hata verir, çünkü + işleç sayısal ilkel tür bağımsız değişkenleri gerektirir:
declare @x xml set @x='' SELECT @x.query('"x" + 4')
Aşağıdaki örnekte, value() işleç gerektiren bir singleton.Belirtildiği gibi xml şemasında, olabilir birden çok <Elem> öğeleri.Statik analiz için ifade türü güvenli değil ve statik bir hata döndürülür belirler.Hatayı gidermek için ifade bir singleton açıkça belirtmek için yayımlanması 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ı
İçin statik içerik ilgili sınırlamalar şunlardır:
XPath uyumluluk modu desteklenmiyor.
xml Yapım için yalnızca şeridi yapım modu desteklenir.Bu varsayılan ayardır.Bu nedenle, oluşturulmuş öğe düğümü türü ise xdt:untyped türü ve nitelikleri olan xdt:untypedAtomic türü.
Yalnızca sipariş edilen sıralama modu desteklenir.
Yalnızca xml boşluk İlkesi şeridi desteklenir.
Taban URI işlevi desteklenmiyor.
fn:doc() desteklenmiyor.
fn:collection() desteklenmiyor.
Statik flagger XQuery sağlanır.
İlişkili harmanlama xml veri türü kullanılır.Bu alfabe, her zaman Unicode codepoint harmanlama için küme.
Dinamik içerik
Dinamik bağlama deyimi yürütüldü saat kullanılabilir olması gereken bilgileri ifade eder.Statik bağlama ek olarak, aşağıdaki bilgileri dinamik içerik parçası olarak başlatılır:
Aşağıdaki gösterildiği gibi içerik öğe, içerik konumu ve içerik boyutu gibi ifade odağı başlatıldı.Bu değerler tarafından geçersiz kılınabilir Not nodes() yöntem.
The xml data type sets the context item, the node being processed, to the document node.
İçerik konumu, göreli olarak işlenen, düğüm bağlam öğenin konumunu ilk küme 1.
Her zaman bir belge düğümü olduğundan içerik boyutu, öğeleri işlenmekte, sıra numarasını ilk 1 olarak küme.
Uygulama kısıtlamaları
İçin dinamik içerik 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 karşı yürütülen xml türü sütunları veya değişkenleri.
The fn:collection() function is not supported.
Ayrıca bkz.