Aracılığıyla paylaş


Kimlikişlev (XQuery)

Öğe düğümleri xs: ID değerleri, eşleşen bir veya daha fazla xs:IDREF değerler sağlanan değerleri dizisini verir$arg.

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

Bağımsız değişkenler

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

Remarks

Öğeleri sırayla eşit bir veya daha fazla xs:IDREFs xs:IDREFs Aday listesinde bir xs: ID değeri olan belge, XML örnek, bir dizi işlev sonucudur.

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

Örnekler

Bu konuda karşı çeşitli depolanan XML örnekleri XQuery örnekleri sunarXML türü sütun AdventureWorksveritabanını.Bu sütun, her bir bakış için bkz:XML veri türü temsili AdventureWorks veritabanındaki.

C.IDREF öznitelik değeri temelinde öğelerini alma

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

Bir yönetici özel öznitelik değeri içinid() işlev ID türü öznitelik değeri ile eşleşen giriş IDREF değeri. <employee> öğe bulur. İçin başka bir deyişle, belirli bir çalışan,id() Çalışan Yöneticisi. işlevini verir

Bu örnekte, neler olur:

  • Bir XML şema koleksiyon oluşturulur.

  • Yazılı birXML değişken XML şema koleksiyon. kullanılarak oluşturulur

  • Sorgu tarafından başvurulan bir ID özniteliği değeri olan öğeyi alıryönetici 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

Sorgu değeri olarak "Dave" döndürür.Bu, Dave Can'ın Yöneticisi olduğunu gösterir.

B.Öğeleri OrderList IDREFS öznitelik değerine dayanarak almak

OrderList özniteliğini aşağıdaki örnekte,<Customer>öğedir IDREFS türü öznitelik.Bu, belirli bir müşteri için sipariş kimlikleri listeler.Olduğu için her sipariş kimliği, bir<Order>öğesinin alt altında<Customer>sağlama sipariş değeri.

Sorgu ifadesi,data(CustOrders:Customers/Customer[1]/@OrderList)[1]ilk müşteri. IDRES listedeki ilk değeri alır,İçin bu değer daha sonra geçirilenid() işlev. İşlevi sonra bulur<Order>Sipariş Kimliği özniteliği değeri, giriş için eşleşen öğeid() 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 değişkeni sürüm desteklemiyorid().

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

See Also

Reference