Aracılığıyla paylaş


Kimliği işlev (XQuery)

Öğe düğümleri ayrımına uyan değerleri, en az biri tarafından xs:IDREF değerleri xs: ID dizisini verir $arg.

Sözdizimi

fn:id($arg as xs:IDREF*) as element()*

Bağımsız değişkenler

  • $arg
    Bir veya daha fazla xs:IDREF değer.

Açıklamalar

XML öğelerinin sırasını işlevinin sonucu olan örnek, eşit aşağıdakilerden birini veya birkaçını xs:IDREFs için aday xs:IDREFs listesinde xs: ID değeri olan belgeyi sırayla.

Xs:IDREF değeri herhangi bir öğe yoksa, işlev boş sırası döndürür.

Örnekler

Bu konuda çeşitli içinde depolanan xml örnekleri karşı XQuery örnekler sağlar xml teni girin sütunlarında AdventureWorks2008R2 veritabanı.Bir bakış bu sütunların her biri için bkz: XML veri türü temsili AdventureWorks2008R2 veritabanında.

A.IDREF öznitelik değerini temel alan öğeleri alınıyor

Aşağıdaki örnek almak için fn:id kullanır <employee> öğeleri, temel IDREF Yöneticisi öznitelik.Bu örnekte, bir Yöneticisi IDREF öznitelik türü özniteliktir ve EID kimlik türü öznitelik özniteliğidir.

Belirli Yöneticisi öznitelik değeri için id() işlev bulur <employee> öðenin ID türünün özniteliği değeri ile eşleşen girdi IDREF değeri.Başka bir deyişle, belirli bir çalışana ait id() işlev çalışan Yöneticisi döndürür.

Bu örnekte gerçekleşir:

  • Bir xml şeması koleksiyon oluşturulur.

  • Bir yazılı xml değişken xml şemasını kullanarak oluşturulur koleksiyon.

  • Sorgu tarafından başvurulan bir ID öznitelik değeri olan öğe alır manager IDREF öznitelik <employee> öğesi.

-- If exists, drop the XML schema collection (SC).
-- drop xml schema collection SC
-- go

create xml schema collection SC as
'<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:e="emp" targetNamespace="emp">
            <element name="employees" type="e:EmployeesType"/>
            <complexType name="EmployeesType">
                 <sequence>
                      <element name="employee" type="e:EmployeeType" minOccurs="0" maxOccurs="unbounded" />
                 </sequence>
            </complexType>  
 
            <complexType name="EmployeeType">
                        <attribute name="eid" type="ID" />
                        <attribute name="name" type="string" />
                        <attribute name="manager" type="IDREF" />
            </complexType>       
</schema>'
go

declare @x xml(SC)
set @x='<e:employees xmlns:e="emp">
<employee eid="e1" name="Joe" manager="e10" />
<employee eid="e2" name="Bob" manager="e10" />
<employee eid="e10" name="Dave" manager="e10" />
</e:employees>'
 
select @x.value(' declare namespace e="emp"; 
 (fn:id(e:employees/employee[@name="Joe"]/@manager)/@name)[1]', 'varchar(50)') 
Go

Sorgunun döndürdüğü "Dave" değer olarak.Bu, Dave Deniz'in Yöneticisi olduğunu gösterir.

B.OrderList IDREFS öznitelik değerini temel alan öğeleri alınıyor

Aşağıdaki örnekte, OrderList özniteliği <Customer> öğesi olan bir IDREFS türü öznitelik.Bu, belirli bir müşteri için sipariş kimlikleri listelenir.Her sipariş kimliği vardır bir <Order> altında alt öğesi <Customer> sağlayan sipariş değeri.

Sorgu ifade data(CustOrders:Customers/Customer[1]/@OrderList)[1], ilk müşteri IDRES listeden ilk değer alırBu değer daha sonra geçirilir id() işlev.işlev sonra bulur <Order> SiparişNo öznitelik değeri giriş için eşleşen öğe id() işlev.

drop xml schema collection SC
go
create xml schema collection SC as
'<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:Customers="Customers" targetNamespace="Customers">
            <element name="Customers" type="Customers:CustomersType"/>
            <complexType name="CustomersType">
                        <sequence>
                            <element name="Customer" type="Customers:CustomerType" minOccurs="0" maxOccurs="unbounded" />
                        </sequence>
            </complexType>
             <complexType name="OrderType">
                <sequence minOccurs="0" maxOccurs="unbounded">
                            <choice>
                                <element name="OrderValue" type="integer" minOccurs="0" maxOccurs="unbounded"/>
                            </choice>
                </sequence>                                           
                <attribute name="OrderID" type="ID" />
            </complexType>

            <complexType name="CustomerType">
                <sequence minOccurs="0" maxOccurs="unbounded">
                            <choice>
                                <element name="spouse" type="string" minOccurs="0" maxOccurs="unbounded"/>
                                <element name="Order" type="Customers:OrderType" minOccurs="0" maxOccurs="unbounded"/>
                            </choice>
                </sequence>                                           
                <attribute name="CustomerID" type="string" />
                <attribute name="OrderList" type="IDREFS" />
            </complexType>
 </schema>'
go
declare @x xml(SC)
set @x='<CustOrders:Customers xmlns:CustOrders="Customers">
                <Customer CustomerID="C1" OrderList="OrderA OrderB"  >
                              <spouse>Jenny</spouse>
                                <Order OrderID="OrderA"><OrderValue>11</OrderValue></Order>
                                <Order OrderID="OrderB"><OrderValue>22</OrderValue></Order>

                </Customer>
                <Customer CustomerID="C2" OrderList="OrderC OrderD" >
                                <spouse>John</spouse>
                                <Order OrderID="OrderC"><OrderValue>33</OrderValue></Order>
                                <Order OrderID="OrderD"><OrderValue>44</OrderValue></Order>

                        </Customer>
                <Customer CustomerID="C3"  OrderList="OrderE OrderF" >
                                <spouse>Jane</spouse>
                                <Order OrderID="OrderE"><OrderValue>55</OrderValue></Order>
                                <Order OrderID="OrderF"><OrderValue>55</OrderValue></Order>
                </Customer>
                <Customer CustomerID="C4"  OrderList="OrderG"  >
                                <spouse>Tim</spouse>
                                <Order OrderID="OrderG"><OrderValue>66</OrderValue></Order>
                        </Customer>
                <Customer CustomerID="C5"  >
                </Customer>
                <Customer CustomerID="C6" >
                </Customer>
                <Customer CustomerID="C7"  >
                </Customer>
</CustOrders:Customers>'
select @x.query('declare namespace CustOrders="Customers";
  id(data(CustOrders:Customers/Customer[1]/@OrderList)[1])')

-- result
<Order OrderID="OrderA">
  <OrderValue>11</OrderValue>
</Order>

Uygulama kısıtlamaları

Sınırlamalar şunlardır:

  • SQL Serveriki bağımsız sürüm destekliyor mu id().

  • SQL Serverbağımsız değişken türü gerektirir id() bir alt türü olan xs:IDREF* olacak.

Ayrıca bkz.

Başvuru