Aracılığıyla paylaş


Süzme değerleri kullanarak sql:limit - alan ve sql:limit - değeri (SQLXML 4.0)

Bazı kısıtlayıcı değeri temel alınarak bir veritabanı sorgusu tarafından döndürülen satır sınırlayabilirsiniz.The sql:limit-field and sql:limit-value annotations are used to identify the database column that contains limiting values and to specify a specific limiting value to be used to filter the data returned.

The sql:limit-field annotation is used to identify a column that contains a limiting value; it is allowed on each mapped element or attribute.

The sql:limit-value annotation is used to specify the limited value in the column that is specified in the sql:limit-field annotation.The sql:limit-value annotation is optional.Ifsql:limit-valueolduğu belirtilmemiş, null değeri kabul edilir.

Not

Çalışırken birsql:limit-fieldeşlenen SQL sütun türü olduğureal, SQLXML 4.0 üzerinde dönüşümü gerçekleştirensql:limit-valueXML şemaları belirtildiği birnvarcharbelirtilen değer.Bu ondalık sınır değerleri gerektirir tam bilimsel gösterim kullanarak belirtildi.Daha fazla bilgi için aşağıdaki örnek B bakın.

Örnekler

Bu örnekler kullanarak çalışma örnekleri oluşturmak için aşağıdakilerin kurulu olması gerekir:

  • Microsoft Office 2010 SuiteSQL ServerYerel istemci

  • MDAC 2.6 veya sonraki sürümleri

Bu örneklerde, şablonlar, XPath sorguları eşleme XSD şemasına göre belirtmek için kullanılır.

C.Müşteri adreslerini sınırlamak için bir özel adres türü döndürdü

Örneğin, bir veritabanını iki tablo içerir:

  • Müşteri (Müşteri Kimliği, şirket adı)

  • Adres (Müşteri Kimliği, AddressType, StreetAddress)

Müşteri sevkiyat adresinin ve/veya bir faturalama adresi olabilir.AddressType sütun değerlerini Sevkiyat ve faturalama.

Bu, eşleme şemada,ShipTo şema öznitelik adresleri ilişkisi. StreetAddress sütununa eşleştirir , Bu öznitelik için döndürülen değerleri yalnızca adres belirterek Kargo için sınırlısql:limit-fieldvesql:limit-valueek açıklamalar.Benzer şekilde,Fatura şema öznitelik bir müşteri. Fatura adresini döndürür

Bu şema oluşur:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
  <xsd:appinfo>
    <sql:relationship name="CustAddr"
        parent="Customer"
        parent-key="CustomerID"
        child="Addresses"
        child-key="CustomerID" />
  </xsd:appinfo>
</xsd:annotation>

  <xsd:element name="Customer" sql:relation="Customer" >
   <xsd:complexType>
        <xsd:sequence>
        <xsd:element name="BillTo" 
                       type="xsd:string" 
                       sql:relation="Addresses" 
                       sql:field="StreetAddress"
                       sql:limit-field="AddressType"
                       sql:limit-value="billing"
                       sql:relationship="CustAddr" >
        </xsd:element>
        <xsd:element name="ShipTo" 
                       type="xsd:string" 
                       sql:relation="Addresses" 
                       sql:field="StreetAddress"
                       sql:limit-field="AddressType"
                       sql:limit-value="shipping"
                       sql:relationship="CustAddr" >
        </xsd:element>
        </xsd:sequence>
        <xsd:attribute name="CustomerID"   type="xsd:int" /> 
        <xsd:attribute name="CompanyName"  type="xsd:string" />
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

Şemaya örnek bir XPath sorgusu sınamak için

  1. İki tablo oluşturmatempdb veritabanı:

    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 2222 Mé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 kodunu kopyalayıp bir metin dosyasına yapıştırın.Dosyayı LimitFieldValue.xml kaydedin.

  4. (LimitFieldValueT.xml) aşağıdaki şablonu oluşturun ve aynı şema (LimitFieldValue.xml) önceki adımda kaydettiğiniz dosyayı kaydedin:

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

    Şablonun kaydedildiği dizine göre eşleştirme şemasını (LimitFieldValue.xml) belirtilen dizin yol var.Mutlak bir yol da, örneğin belirtilebilir:

    mapping-schema="C:\MyDir\LimitFieldValue.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ütmek sorgular kullanma.

Bu sonucu oluşur:

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

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

Örneğin, bir veritabanını iki tablo içerir:

  • Sipariş (sipariş kimliği)

  • OrderDetails (sipariş kimliği, ProductID, BirimFiyat, miktar, fiyat, iskonto)

Bu, eşleme şemada,Sipariş Kimliği Sipariş kimliği sütun sipariş ilişkisi. özniteliği sipariş ayrıntılarını eşleştirir , Bu öznitelik için döndürülen değerleri yalnızca 2.0000000e değeri olan sınırlı-001 (0,2) için belirtilenİskonto özniteliği kullanılarak sql:limit-fieldve sql:limit-valueek açıklamalar.

Bu şema oluşur:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
  <xsd:annotation>
   <xsd:appinfo>
    <sql:relationship name="OrderOrderDetails"
        parent="Orders"
        parent-key="OrderID"
        child="OrderDetails"
        child-key="OrderID" />
   </xsd:appinfo>
  </xsd:annotation>
  <xsd:element name="root" sql:is-constant="1">
   <xsd:complexType>
     <xsd:sequence>
       <xsd:element name="Order" sql:relation="Orders" >
          <xsd:complexType>
             <xsd:sequence>
                <xsd:element name="orderDetail" 
                       sql:relation="OrderDetails" 
                       sql:limit-field="Discount"                       sql:limit-value="2.0000000e-001"
                       sql:relationship="OrderOrderDetails">
                   <xsd:complexType>
                     <xsd:attribute name="OrderID"   /> 
                     <xsd:attribute name="ProductID" /> 
                     <xsd:attribute name="Discount"  /> 
                     <xsd:attribute name="Quantity"  /> 
                     <xsd:attribute name="UnitPrice" /> 
                   </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
           <xsd:attribute name="OrderID"/> 
          </xsd:complexType>
       </xsd:element>
     </xsd:sequence>
   </xsd:complexType>
  </xsd:element>
</xsd:schema>

Şemaya örnek bir XPath sorgusu sınamak için

  1. İki tablo oluşturmatempdb 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}"
    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. yürütmek TestQuery.vbs dosyayı Windows Gezgini'nde üzerini tıklatarak.

    Bu sonucu oluşur:

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