Aracılığıyla paylaş


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:

  1. Sorgu ayrıştırma.

  2. Belirtilen işlev ve tür adları çözümleme ifade.

  3. 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.