Udostępnij przez


Filtrowanie wartości przy użyciu sql:limit-pole i sql:limit-wartość (schematu XDR)

Ważna informacjaWażne:

Ten temat jest dołączane jako odniesienia dla starszych aplikacji.Żadna praca przyszłego rozwoju są wykonywane z tej funkcji.Unikaj używania tej funkcji w nowych prac rozwojowych.Zamiast tego użyj adnotacjami schematów XSD tworzenia widoków XML.Aby uzyskać więcej informacji, zobacz Wprowadzenie do adnotacjami schematów XSD (SQLXML 4.0).Można przekonwertować istniejące schematy XDR adnotacjami schematów XSD.Aby uzyskać więcej informacji, zobacz Konwertowanie adnotacjami schematy XDR równoważne schematów XSD (SQLXML 4.0).

Można ograniczyć wierszy zwracanych z kwerendy bazy danych na podstawie niektóre wartości graniczne.Adnotacje są używane do identyfikowania kolumna bazy danych, która zawiera wartości graniczne i określić określone wartości graniczne do filtrowania danych zwróconych.

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.

sql:limit-value Adnotacji jest używany do określenia ograniczoną wartość kolumna, określone w sql:limit-field adnotacji.Ta adnotacja jest opcjonalne.Jeśli sql:limit-value jest nie jest określony, jest przyjmowana wartość null.

Ostrzeżenie

Podczas pracy z sql:limit-field gdzie mapowanej kolumna SQL jest typu Pływak i rzeczywistym (języka Transact-SQL), SQLXML 4.0 wykonuje konwersję na sql:limit-value jak określono w schematach XML jako nchar i nvarchar (Transact-SQL) określonej wartości.To wymaga wartości dziesiętne limit określony przy użyciu pełnej notacji naukowej.Aby uzyskać więcej informacji zobacz przykład b poniżej.

Przykłady

Aby utworzyć próbki pracy przy użyciu poniższych przykładach, musi spełniać określone wymagania.Aby uzyskać więcej informacji, zobacz Wymagania dotyczące uruchamianie przykładów SQLXML.

A.Ograniczenia adresów klientów, zwracany typ określony adres

W tym przykładzie bazy danych zawiera dwie tabele:

  • Klienta (IDklienta, NazwaFirmy)

  • Adresy (IDklienta, AddressType, adres)

Klient może mieć wysyłki lub adres bilingowy (AddressType kolumna wartości dostawy i fakturowanie).

Jest to schemat mapowania, w którym miejsce dostawy atrybut schematu mapuje adres kolumna względem adresów.Wartości zwracane dla tego atrybut są ograniczone tylko adresy wysyłkowe określając sql:limit-field i sql:limit-value adnotacje.Podobnie Adres rachunku atrybut schematu zwraca tylko adres fakturowania klienta.

Jest to schemat:

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

Aby przetestować przykładowe kwerendy XPath względem schematu

  1. Utwórz następujące dwie tabele w bazie danych tempdb:

    USE tempdb
    CREATE TABLE Customer (CustomerID int primary key, 
                           CompanyName varchar(30))
    CREATE TABLE Addresses(CustomerID int, 
                           StreetAddress varchar(50),
                           AddressType varchar(10))
    
  2. Dodaj dane przykładowe:

    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. Kod schematu skopiować i wkleić go do pliku tekstowego.Zapisz plik jako LimitFieldValueXdr.xml.

  4. Skopiuj następujący szablon i wkleić go do pliku tekstowego.Zapisz plik jako LimitFieldValueXdrT.xml w tym samym katalogu, w którym zapisano LimitFieldValueXdr.xml.Kwerendy w szablonie wybiera wszystkie rekordy z tabela Nabywca.

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

    Ścieżka katalogu określonego dla mapowania schematu (LimitFieldValueXdr.xml) jest katalog, w którym zapisany szablon.Ścieżka bezwzględna również można określić, na przykład:

    mapping-schema="C:\MyDir\LimitFieldValueXdr.xml"
    
  5. Tworzenie i używanie szablon wykonać skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).

    Aby uzyskać więcej informacji, zobacz Przy użyciu ADO SQLXML wykonanie kwerendy 4.0.

Zestaw wyników jest następujący:

<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.Ograniczanie wyniki na podstawie typu danych rzeczywistych wartości rabatu

W tym przykładzie bazy danych zawiera dwie tabele:

  • Zamówienia (IDZamówienia)

  • SzczegółyZamówień (IDZamówienia i IDProduktu CenaJednostkowa, ilości, ceny, rabatu)

Jest to schemat mapowania, w którym Odwzorowuje atrybut IDZamówienia na szczegóły zamówienia IDZamówienia kolumna w odniesieniu do zamówień.Wartości, które są zwracane dla tego atrybut są ograniczone do tylko te, które mają wartość 2.0000000e-001 (0,2) określoną dla przy użyciu atrybut rabatu sql:limit-field i sql:limit-value adnotacje.

Jest to schemat:

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

Aby przetestować przykładowe kwerendy XPath względem schematu

  1. Utwórz dwie tabele w tempdb bazy danych:

    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. Dodaj dane przykładowe:

    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. Zapisz schemat (LimitFieldValue.xml) w katalogu.

  4. Utwórz następujący skrypt testu (TestQuery.vbs), modyfikowanie MójSerwer nazwę na SQL Server komputer i zapisać go w tym samym katalogu, używany w poprzednim kroku, aby zapisać schemat:

    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. Wykonywanie pliku TestQuery.vbs, klikając go w Eksploratorze Windows.

    Jest to wynikiem:

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

Zobacz także

Odwołanie