Aracılığıyla paylaş


SQL:limit kullanarak değerleri filtreleme-alan ve SQL:limit-değeri (xdr şeması)

Önemli notÖnemli

Bu konuda eski uygulamalar için bir referans olarak dahil edilir.Bu özelliği yok ileride geliştirme çalışmaları yapılacaktır.Bu özellik yeni geliştirme çalışması kullanmaktan kaçının.Bunun yerine, açıklama eklenmiş xsd şemaları, xml görünümlerini oluşturmak için kullanın.Daha fazla bilgi için bkz: Açıklama eklenmiş xsd şemaları (SQLxml 4.0) Giriº.xsd şemaları için varolan açıklama eklenmiş xdr şemalarını dönüştürebilirsiniz.Daha fazla bilgi için bkz: Açıklama eklenmiş xdr şemalarını eşdeğer xsd şemaları (SQLxml 4.0) dönüştürme.

Bazı kısıtlayıcı değerine dayalı veritabanı sorgusundan döndürülen satırların sınırlayabilirsiniz.Bu ek açıklama veritabanı tanımlamak için kullanılan sütun sınırlandırma değerleri içeren ve belirtmek için belirli bir sınırlama değeri döndürülen verileri süzmek için kullanılacak.

The sql:limit-field annotation is used to identify a column that contains a limiting value.sql:limit-field is used to qualify the join relationship specified using <sql:relationship>.sql:limit-field must be used on an element or attribute that has <sql:relationship> specified.

The sql:limit-value annotation is used to specify the limited value in the column specified in a sql:limit-field annotation.Bu ek açıklama isteğe bağlıdır.If sql:limit-value is not specified, a null value is assumed.

Not

Çalışırken bir sql:limit-field olduğu eşlenen sql sütun türü Kayan nokta ve gerçek (Transact-sql), sqlxml 4.0 üzerinde dönüşümü gerçekleştiren sql:limit-value xml şemaları belirtildiği gibi bir n karakter ve n değişken karakter (Transact-SQL) belirtilen değeri.Bu sınırı ondalık değerleri gerektirir tam bilimsel gösterim kullanarak belirtilen.Daha fazla bilgi için aşağıdaki örnekte b bakın.

Örnekler

Aşağıdaki örnekler kullanarak çalışma örnekleri oluşturmak için belirli gereksinimleri karşılaması gerekir.Daha fazla bilgi için bkz: SQLxml örnekleri çalıştırma gereksinimleri.

A.Müşteri adresleri bir belirli adres türü için döndürülen sınırı

Bu örnekte, bir veritabanını iki tablo içerir:

  • Müşteri (CustomerID, CompanyName)

  • Adresleri (MüşteriNo, AddressType, StreetAddress)

Bir müşteri bir sevkiyat ve/veya bir faturalama adresi (AddressType sütun değerlerini sevkiyat faturalama ve) sahip olabilir.

Bu hangi eşleme şemada, ShipTo öznitelik şeması eşlemeleri StreetAddress için sütun adresleri ilişkisi içinde.Bu öznitelik için döndürülen değerleri yalnızca adreslerini belirterek Kargo için sınırlı sql:limit-field ve sql:limit-value ek açıklamalar.Benzer şekilde, BillTo şema öznitelik yalnızca bir müşterinin Fatura adresini döndürür.

Bu şema oluşur:

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="Customer" sql:relation="Customer" >
    <AttributeType name="CustomerID" />
    <AttributeType name="CompanyName" />
    <AttributeType name="BillTo" />
    <AttributeType name="ShipTo" />

    <attribute type="CustomerID" />
    <attribute type="CompanyName" />
    <attribute type="BillTo" 
                sql:limit-field="AddressType"
                sql:limit-value="billing"
                sql:field="StreetAddress"
                sql:relation="Addresses" >
                <sql:relationship 
                        key="CustomerID"
                        key-relation="Customer"
                       foreign-relation="Addresses"
                       foreign-key="CustomerID" />
    </attribute>
    <attribute type="ShipTo" 
                sql:limit-field="AddressType"
                sql:limit-value="shipping"
                sql:field="StreetAddress"
                sql:relation="Addresses" >
                <sql:relationship 
                     key="CustomerID"
                     key-relation="Customer"
                     foreign-relation="Addresses"
                     foreign-key="CustomerID" />
    </attribute>
</ElementType>
</Schema>

Örnek XPath sorgusu şema karşı sınamak için

  1. Tempdb veritabanında aşağıdaki iki tablo oluşturun:

    USE tempdb
    CREATE TABLE Customer (CustomerID int primary key, 
                           CompanyName varchar(30))
    CREATE TABLE Addresses(CustomerID int, 
                           StreetAddress varchar(50),
                           AddressType varchar(10))
    
  2. Örnek verileri ekleyin:

    INSERT INTO Customer values (1, 'Company A')
    INSERT INTO Customer values (2, 'Company B')
    
    INSERT INTO Addresses values
                (1, 'Obere Str. 57 Berlin', 'billing')
    INSERT INTO Addresses values
                (1, 'Avda. de la Constitución 2222México D.F.', 'shipping')
    INSERT INTO Addresses values
                (2, '120 Hanover Sq., London', 'billing')
    INSERT INTO Addresses values
                (2, 'Forsterstr. 57, Mannheim', 'shipping')
    
  3. Yukarıdaki şema kodu kopyalayın ve bir metin dosyasına yapıştırın.Dosyayı LimitFieldValueXdr.xml kaydedin.

  4. Aşağıdaki şablon kopyalama ve bir metin dosyasına yapıştırın.Dosyayı LimitFieldValueXdrT.xml LimitFieldValueXdr.xml kaydettiğiniz aynı dizine kaydedin.Sorgu şablon müşterinin tüm kayıtları seçer tablo.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="LimitFieldValueXdr.xml">
        /Customer
      </sql:xpath-query>
    </ROOT>
    

    Dizin yol (LimitFieldValueXdr.xml) eşleme şema şablonun kaydedileceği dizini ile ilişkili olduğu için belirtilen.Mutlak bir yol da, örneğin belirtilebilir:

    mapping-schema="C:\MyDir\LimitFieldValueXdr.xml"
    
  5. Oluşturun ve sqlxml 4.0 sınama komut dosyası (Sqlxml4test.vbs) şablonu yürütmek için kullanın.

    Daha fazla bilgi için bkz: ado SQLxml yürütme kullanarak 4.0 sorgular.

Sonuç küme aşağıdadır:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
  <Customer CustomerID="1" CompanyName="Company A" 
          BillTo="Obere Str. 57 Berlin" 
          ShipTo="Avda. de la Constitución 2222México D.F." /> 
  <Customer CustomerID="2" CompanyName="Company B" 
          BillTo="120 Hanover Sq., London" 
          ShipTo="Forsterstr. 57, Mannheim" /> 
</ROOT>

B.Bir gerçek veri türü iskonto değere göre sonuçlar sınırlama

Bu örnekte, bir veritabanını iki tablo içerir:

  • Siparişler (SiparişNo)

  • OrderDetails (OrderID, ProductID, BirimFiyat, miktar, fiyat veya iskonto)

Bu eşleme şema içinde sipariş ayrıntılarını SiparişNo öznitelik eşler için SiparişNo, sütun siparişleri ilişkisi içinde.Bu öznitelik için döndürülen değerleri yalnızca 2.0000000e değeri olan sınırlı-001 (0,2) özniteliği kullanılarak iskontosu için belirtilen sql:limit-field ve sql:limit-value ek açıklamalar.

Bu şema oluşur:

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes"
xmlns:sql="urn:schemas-microsoft-com:xml-sql">

  <ElementType name="root" sql:is-constant="1">
    <element type="Order"/>
  </ElementType>

  <ElementType name="orderDetail" sql:relation="OrderDetails">
     <AttributeType name="OrderID" />
     <AttributeType name="ProductID" />
     <AttributeType name="Discount" />
     <AttributeType name="Quantity" />
     <attribute type="OrderID" />
     <attribute type="ProductID" />
     <attribute type="Discount" />
     <attribute type="Quantity" />
  </ElementType>

  <ElementType name="Order" sql:relation="Orders">
     <AttributeType name="OrderID"/>
     <attribute type="OrderID"/>
     <element type="orderDetail"  
              sql:limit-field="Discount" 
              sql:limit-value="2.0000000e-001">
        <sql:relationship key="OrderID"
                          key-relation="Orders"
                          foreign-relation="OrderDetails"
                          foreign-key="OrderID"/>
     </element>
  </ElementType>

</Schema>

Örnek XPath sorgusu şema karşı sınamak için

  1. İki tablo oluşturmak tempdb veritabanı:

    USE tempdb
    CREATE TABLE Orders ([OrderID] int NOT NULL ) ON [PRIMARY]
    ALTER TABLE Orders WITH NOCHECK ADD 
    CONSTRAINT [PK_Orders] PRIMARY KEY  CLUSTERED (
       [OrderID]
     )  ON [PRIMARY] 
    CREATE TABLE [OrderDetails] (
       [OrderID] int NOT NULL ,
       [ProductID] int NOT NULL ,
       [UnitPrice] money NULL ,
       [Quantity] smallint NOT NULL ,
       [Discount] real NOT NULL 
    ) ON [PRIMARY]
    
  2. Örnek verileri ekleyin:

    INSERT INTO Orders ([OrderID]) values (10248)
    INSERT INTO Orders ([OrderID]) values (10250)
    INSERT INTO Orders ([OrderID]) values (10251)
    INSERT INTO Orders ([OrderID]) values (10257)
    INSERT INTO Orders ([OrderID]) values (10258)
    INSERT INTO [OrderDetails] ([OrderID],[ProductID],[UnitPrice],[Quantity],[Discount]) values (10248,11,14,12,0)
    INSERT INTO [OrderDetails] ([OrderID],[ProductID],[UnitPrice],[Quantity],[Discount]) values (10250,51,42.4,35,0.15)
    INSERT INTO [OrderDetails] ([OrderID],[ProductID],[UnitPrice],[Quantity],[Discount]) values (10251,22,16.8,6,0.05)
    INSERT INTO [OrderDetails] ([OrderID],[ProductID],[UnitPrice],[Quantity],[Discount]) values (10257,77,10.4,15,0)
    INSERT INTO [OrderDetails] ([OrderID],[ProductID],[UnitPrice],[Quantity],[Discount]) values (10258,2,15.2,50,0.2)
    
  3. Şema (LimitFieldValue.xml) bir dizine kaydedin.

  4. Aşağıdaki sınama komut dosyası (TestQuery.vbs) oluşturmak, sunucum için sql Server bilgisayarınızın adını değiştirmek ve şemayı kaydetmek için önceki adımda kullanılan aynı dizine kaydedin:

    Set conn = CreateObject("ADODB.Connection")
    conn.Open "Provider=SQLOLEDB;Data Source=MyServer;Database=tempdb;Integrated Security=SSPI"
    conn.Properties("SQLXML Version") = "sqlxml.4.0" 
    Set cmd = CreateObject("ADODB.Command")
    Set stm = CreateObject("ADODB.Stream")
    Set cmd.ActiveConnection = conn
    stm.open
    result ="none"
    strXPathQuery="/root"
    DBGUID_XPATH = "{EC2A4293-E898-11D2-B1B7-00C04F680C56}"
    'DBGUID_MSSQLXML = "{5d531cb2-e6ed-11d2-b252-00c04f681b71}"
    cmd.Dialect = DBGUID_XPATH
    cmd.CommandText = strXPathQuery
    cmd.Properties("Mapping schema") = "LimitFieldReal.xml"
    cmd.Properties("Output Stream").Value = stm
    cmd.Properties("Output Encoding") = "utf-8"
    WScript.Echo "executing for xml query"
    On Error Resume Next
    cmd.Execute , ,1024
    if err then
    Wscript.Echo err.description
    Wscript.Echo err.Number
    Wscript.Echo err.source
    On Error GoTo 0
    else
    stm.Position = 0
    result  = stm.ReadText
    end if
    WScript.Echo result
    Wscript.Echo "done"
    
  5. TestQuery.vbs dosyası, Windows Gezgini'nde tıklatarak çalıştırabilirsiniz.

    Bu sonucu verir:

    <root>
      <Order OrderID="10248"/>
      <Order OrderID="10250"/>
      <Order OrderID="10251"/>
      <Order OrderID="10257"/>
      <Order OrderID="10258">
        <orderDetail OrderID="10258" 
                     ProductID="2" 
                     Discount="0.2" 
                     Quantity="50"/>
      </Order>
    </root>
    

Ayrıca bkz.

Başvuru