Udostępnij za pośrednictwem


Wstawianie danych za pomocą Updategrams XML (SQLXML 4.0)

An updategram wskazuje operację wstawiania podczas wystąpienie rekord jest wyświetlany w <after> blok, ale nie w odpowiadających im <before> blok. W takim przypadek updategram wstawia rekordu w <after> blok do bazy danych.

Jest to format updategram dla operacji wstawiania:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <updg:sync [mapping-schema="SampleSchema.xml"]  >
   [<updg:before>
   </updg:before>]
    <updg:after [updg:returnid="x y ...] >
       <ElementName [updg:id="value"] 
                   [updg:at-identity="x"] 
                   [updg:guid="y"]
                   attribute="value" 
                   attribute="value"
                   ...
       />
      [<ElementName .../>... ]
    </updg:after>
  </updg:sync>
</ROOT>

&lt;przed&gt; blok

The <before> blok can be omitted for an insert operation. Jeśli opcjonalna mapping-schema atrybut nie jest określony, <ElementName> które określono w mapach updategram do tabela bazy danych i elementy podrzędność lub atrybuty mapy do kolumn w tabela.

&lt;Po&gt; Zablokuj

Można określić jeden lub kilka rekordów w <after> blok.

Jeśli <after> Blok nie dostarcza wartości dla określonej kolumna, the updategram używa domyślnej wartości określonej w schemacie adnotacjami (jeśli został określony schemat). If the schema does not specify a default value for the column, the updategram does not specify any explicit value to this column and, instead, assigns the Microsoft SQL Server default value (if specified) to this column.Jeśli nie ma żadnych SQL Server Wartość domyślna i kolumna akceptuje wartości NULL, the updategram ustawia wartość kolumna wartości null. Jeśli kolumna nie ma wartość domyślną i nie akceptuje wartości NULL, wykonanie polecenia kończy się niepowodzeniem, a następnie zwraca błąd, updategram.Opcjonalny updg:returnid atrybut jest używany do zwracania wartości tożsamości, który jest generowany przez system podczas dodawania rekordu w tabela z kolumną typu IDENTITY.

updg:ID atrybut

Jeśli updategram wstawia tylko te rekordy, nie wymaga updategram updg:id atrybut. Aby uzyskać więcej informacji na temat updg:id, zobacz Aktualizowanie danych za pomocą Updategrams XML (SQLXML 4.0).

updg: atrybut w tożsamości

Gdy updategram wstawia rekordu w tabela zawierającej kolumna typu IDENTITY, the updategram może przechwytywać systemu przypisane wartości za pomocą opcjonalnej updg:at-identity atrybut. The updategram można użyć tej wartości do wykonywania kolejnych operacji.Podczas wykonywania updategram, mogą być zwracane wartości tożsamości, który jest generowany przez określenie updg:returnid atrybut.

updg:GUID atrybut

The updg:guid atrybut is an optional atrybut that generates a globally unique identifier. Wartość ta pozostanie w zakresie całego <sync> blokowanie, w którym został on określony. Można użyć tej wartości, gdziekolwiek w <sync> blok. The attribute calls the NEWGUID()SQL Server function to generate the unique identifier.

Przykłady

Aby utworzyć próbek pracy przy użyciu poniższych przykładach, musi spełniać wymagania określone w Wymagania dotyczące uruchamianie SQLXML przykłady.

Przed użyciem przykłady updategram należy pamiętać o następujących kwestiach:

  • Większość przykładów za pomocą domyślnego mapowania (czyli nie mapowania schematu jest określona w updategram).Aby uzyskać więcej przykładów updategrams korzystające z mapowania schematów zobacz Określanie adnotacjami mapowanie schematu w Updategram (SQLXML 4.0).

  • Większość przykładów korzysta z przykładowej bazy danych AdventureWorks.Wszystkie aktualizacje mają zastosowanie do tabel w bazie danych.Można przywrócić bazy danych AdventureWorks.Aby uzyskać informacje dotyczące przywracania bazy danych AdventureWorks zobacz AdventureWorks przykładowe bazy danych.

A.Wstawianie rekordu za pomocą updategram

Ten zorientowany atrybut updategram wstawia rekordu w tabela HumanResources.Employee bazy danych AdventureWorks.

W tym przykładzie updategram nie określono mapowania schematu.Dlatego updategram używa domyślnego mapowania, w którym nazwa elementu mapuje nazwy tabela i atrybuty lub mapowania elementów podrzędność do kolumn w tej tabela.

Schemat AdventureWorks tabela HumanResources.Employee nakłada ograniczenie "niedozwolone wartości null" wszystkie kolumny z wyjątkiem ManagerID i IDPracownika.Dlatego też updategram musi zawierać wartości określone dla wszystkich kolumn, ale te dwie kolumny.ManagerID zostanie pominięty, jego wartość będzie równa NULL podczas wykonywania updategram.IDPracownika jest to kolumna typ IDENTITY.Dlatego nie ma wartości są określone dla niego.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <updg:sync >
    <updg:before>
    </updg:before>
    <updg:after>
       <HumanResources.Employee 
            NationalIDNumber="111111111" 
            ContactID="1156" 
            LoginID="adventure-works\paulw0"
            DepartmentID="7" 
            ShiftID="3" 
            Title="Production Technician - WC40"
            EmergencyContactID="1445" 
            AddressID="157"   
            BirthDate="1970-12-15 00:00:00.000"
            MaritalStatus="S" 
            Gender="M" 
            HireDate="1999-01-05 00:00:00.000"
            SalariedFlag="0" 
            BaseRate="15.00"
            PayFrequency="1" 
            VacationHours="80" 
            SickLeaveHours="80" 
            CurrentFlag="1" 
            rowguid="00001111-2222-3333-4444-555566667777"
            ModifiedDate="1998-12-29 00:00:00.000"/>
    </updg:after>
  </updg:sync>
</ROOT>

Aby przetestować kwerendę XPath próbki względem schematu

  1. Skopiuj updategram powyżej i wkleić go do pliku tekstowego.Zapisz plik jako MyUpdategram.xml.

  2. Tworzenie i używanie skryptu testu 4.0 SQLXML (Sqlxml4test.vbs) do wykonać tego szablonu.

    Aby uzyskać więcej informacji zobaczPrzy użyciu obiektu ADO do wykonywania SQLXML bada 4.0.

W mapowanie zorientowane na element the updategram wygląda następująco:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <updg:sync >
    <updg:before>
    </updg:before>
    <updg:after>
       <HumanResources.Employee>
            <NationalIDNumber>111111111</NationalIDNumber>
            <ContactID>1156</ContactID>
            <LoginID>adventure-works\paulw0</LoginID>
            <DepartmentID>7</DepartmentID>
            <ShiftID>3</ShiftID>
            <Title>Production Technician - WC40</Title>
            <EmergencyContactID>1445</EmergencyContactID>
            <AddressID>157</AddressID>
            <BirthDate>1970-12-15 00:00:00.000</BirthDate>
            <MaritalStatus>S</MaritalStatus>
            <Gender>M</Gender>
            <HireDate>1999-01-05 00:00:00.000</HireDate>
            <SalariedFlag>0</SalariedFlag>
            <BaseRate>15.00</BaseRate>
            <PayFrequency>1</PayFrequency>
            <VacationHours>80</VacationHours>
            <SickLeaveHours>80</SickLeaveHours>
            <CurrentFlag>1</CurrentFlag>
            <rowguid>00001111-2222-3333-4444-555566667777</rowguid>
            <ModifiedDate>1998-12-29 00:00:00.000</ModifiedDate>
       </HumanResources.Employee>
    </updg:after>
  </updg:sync>
</ROOT>

W trybu mieszanego (zorientowany na element i zorientowany atrybut) updategram element może mieć atrybuty i podelementy, jak pokazano w tym updategram:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <updg:sync >
    <updg:before>
    </updg:before>
    <updg:after>
       <HumanResources.Employee 
            NationalIDNumber="111111111" 
            ContactID="1156" 
            DepartmentID="7" 
            ShiftID="3" 
            EmergencyContactID="1445" 
            AddressID="157"   
            SalariedFlag="0" 
            BaseRate="15.00"
            PayFrequency="1" 
            VacationHours="80" 
            SickLeaveHours="80" 
            CurrentFlag="1">
            <LoginID>adventure-works\paulw0</LoginID>
            <Title>Production Technician - WC40</Title>
            <BirthDate>1970-12-15 00:00:00.000</BirthDate>
            <HireDate>1999-01-05 00:00:00.000</HireDate>
            <MaritalStatus>S</MaritalStatus>
            <Gender>M</Gender>
            <rowguid>00001111-2222-3333-4444-555566667777</rowguid>
            <ModifiedDate>1998-12-29 00:00:00.000</ModifiedDate>
       </HumanResources.Employee>
    </updg:after>
  </updg:sync>
</ROOT>

B.Wstawianie wielu rekordów przy użyciu updategram

To updategram dodaje dwa nowe rekordy zmiany do tabela HumanResources.Shift.The updategram nie określa opcjonalny <before> blok.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <updg:sync>
    <updg:after >
       <HumanResources.Shift Name="Day-Evening"
                        StartTime="1900-01-01 11:00:00.000"
                        EndTime="1900-01-01 19:00:00.000"
                        ModifiedDate="2004-01-01 00:00:00.000" />
       <HumanResources.Shift Name="Evening-Night"
                        StartTime="1900-01-01 19:00:00.000"
                        EndTime="1900-01-01 03:00:00.000"
                        ModifiedDate="2004-01-01 00:00:00.000" />
    </updg:after>
  </updg:sync>
</ROOT>

Aby przetestować kwerendę XPath próbki względem schematu

  1. Skopiuj updategram powyżej i wkleić go do pliku tekstowego.Zapisz plik jako AddShifts.xml Updategram.

  2. Tworzenie i używanie skryptu testu 4.0 SQLXML (Sqlxml4test.vbs) do wykonać tego szablonu.

    Aby uzyskać więcej informacji zobaczPrzy użyciu obiektu ADO do wykonywania SQLXML bada 4.0.

Inna wersja tego przykładu to updategram, która używa dwóch odrębnych <after> Bloki zamiast jednego blok wstawić dwie pracowników. To jest prawidłowy i może być zakodowany w następujący sposób:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <updg:sync>
    <updg:after >
       <HumanResources.Shift Name="Day-Evening"
                        StartTime="1900-01-01 11:00:00.000"
                        EndTime="1900-01-01 19:00:00.000"
                        ModifiedDate="2004-01-01 00:00:00.000" />
    </updg:after>
    <updg:before>
    </updg:before>
    <updg:after >
       <HumanResources.Shift Name="Evening-Night"
                        StartTime="1900-01-01 19:00:00.000"
                        EndTime="1900-01-01 03:00:00.000"
                        ModifiedDate="2004-01-01 00:00:00.000" />
    </updg:after>
  </updg:sync>
</ROOT>

C.Praca z prawidłowych znaków programu SQL Server, które nie są prawidłowe w formacie XML

W SQL Server, nazwy tabel mogą zawierać spacji, na przykład w tabela Opisy zamówień w bazie danych Northwind. Jednak nie jest to ważne w znakach XML, które są prawidłowe SQL Server identyfikatory, ale nie prawidłowe identyfikatory XML może być zakodowany używa '__xHHHH__' jako wartości kodowania, gdzie gggg oznacza czterocyfrowy UCS-2 kodu szesnastkowego znaku w kolejności najbardziej znaczący bit pierwszego.

Uwaga

W tym przykładzie użyto bazę danych Northwind, który został najpierw dostarczany z SQL Server 2000 w przykładowej bazy danych. Baza danych Northwind nie jest dostarczany w nowszych wersjach tego programu SQL Server. Można jednak zainstalować bazę danych Northwind za pomocą skryptu programu SQL dostępne do pobrania.Aby uzyskać więcej informacji zobaczPobieranie Northwind i przykładowe bazy danych pubs.

Ponadto nazwy elementu muszą być ujęte w nawiasy kwadratowe ([]).Ponieważ znaki [i] są nieprawidłowe w formacie XML, użytkownik musi zakodować je jako _x005B_ i _x005D_, odpowiednio.(Jeśli używasz schematu mapowania, możesz podać nazwy elementów, które nie zawierają znaki, które nie są prawidłowe, na przykład spacji.Mapowanie schematu jest niezbędne mapowanie, więc nie trzeba kodowania dla tych znaków).

To updategram dodaje rekord w tabela Opisy zamówień w bazie danych Northwind:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <updg:sync >
    <updg:before>
    </updg:before>
    <updg:after>
      <_x005B_Order_x0020_Details_x005D_ OrderID="1"
            ProductID="11"
            UnitPrice="$1.0"
            Quantity="1"
            Discount="0.0" />
    </updg:after>
  </updg:sync>
</ROOT>

Znajduje się kolumna CenaJednostkowa w tabela Szczegóły zamówień money Typ. Aby zastosować odpowiedni typ konwersji (od string Typ money Typ), należy dodać znak dolara ($) jako część wartości. Jeśli updategram nie określono mapowania schematu, pierwszy znak string wartość jest wyznaczana. Jeśli pierwszy znak jest znak dolara ($), stosowane są odpowiednie konwersji.

Jeśli updategram określono ze schematem mapowanie jako odpowiednio jest oznaczone kolumna dt:type="fixed.14.4" lub sql:datatype="money", znak dolara ($) nie jest wymagana i konwersji jest obsługiwane przez mapowanie. Jest to zalecany sposób upewnij się, że odpowiedni typ konwersji występuje.

Aby przetestować kwerendę XPath próbki względem schematu

  1. Skopiuj updategram powyżej i wkleić go do pliku tekstowego.Zapisz plik jako UpdategramSpacesInTableName.xml.

  2. Tworzenie i używanie skryptu testu 4.0 SQLXML (Sqlxml4test.vbs) do wykonać tego szablonu.

    Aby uzyskać więcej informacji zobaczPrzy użyciu obiektu ADO do wykonywania SQLXML bada 4.0.

D.Za pomocą atrybut w tożsamości pobrać wartości, które zostało wstawione kolumna Typ IDENTITY

Następujące updategram wstawia dwa rekordy: jedna w tabela Sales.SalesOrderHeader, a druga w tabela Sales.SalesOrderDetail.

Po pierwsze updategram dodaje rekord do tabela Sales.SalesOrderHeader.W tej tabela kolumnę SalesOrderID jest to kolumna typ IDENTITY.Dlatego po dodaniu tego rekordu do tabela używa updategram at-identityatrybut do przechwytywania przypisaną wartość SalesOrderID jako "x" (wartość symbolu zastępczego). To określa następnie updategam at-identity zmienną jako wartość atrybut SalesOrderID <Sales.SalesOrderDetail> element.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
 <updg:sync >
  <updg:before>
  </updg:before>
  <updg:after>
   <Sales.SalesOrderHeader updg:at-identity="x" 
             RevisionNumber="1"
             OrderDate="2001-07-01 00:00:00.000"
             DueDate="2001-07-13 00:00:00.000"
             OnlineOrderFlag="0"
             CustomerID="676"
             ContactID="378"
             BillToAddressID="985"
             ShipToAddressID="985"
             ShipMethodID="5"
             SubTotal="24643.9362"
             TaxAmt="1971.5149"
             Freight="616.0984"
             rowguid="00001111-2222-3333-4444-556677889900"
             ModifiedDate="2001-07-08 00:00:00.000" />
      <Sales.SalesOrderDetail SalesOrderID="x"
                LineNumber="1"
                OrderQty="1"
                ProductID="776"
                SpecialOfferID="1"
                UnitPrice="2429.9928"
                UnitPriceDiscount="0.00"
                rowguid="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
                ModifiedDate="2001-07-01 00:00:00.000" />
    </updg:after>
  </updg:sync>
</ROOT>

Jeśli chcesz zwrócić wartość tożsamości, który jest generowany przez updg:at-identity atrybut, można użyć updg:returnid atrybut. Poniżej przedstawiono updategram poprawione, zwracająca wartość tej tożsamości.(Ta updategram dodaje dwa rekordy w porządku i dwa rekordy szczegółów zamówienia, wystarczy dokonać w przykładzie jest nieco bardziej skomplikowane.)

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
 <updg:sync>
  <updg:before>
  </updg:before>
  <updg:after updg:returnid="x y" >
       <HumanResources.Shift updg:at-identity="x" Name="Day-Evening"
                        StartTime="1900-01-01 11:00:00.000"
                        EndTime="1900-01-01 19:00:00.000"
                        ModifiedDate="2004-01-01 00:00:00.000" />
       <HumanResources.Shift updg:at-identity="y" Name="Evening-Night"
                        StartTime="1900-01-01 19:00:00.000"
                        EndTime="1900-01-01 03:00:00.000"
                        ModifiedDate="2004-01-01 00:00:00.000" />
  </updg:after>
 </updg:sync>
</ROOT>

Po wykonaniu updategram zwraca wyniki podobne do następujących, która zawiera wartości tożsamości (wygenerowanym wartość kolumna ShiftID używany do identyfikacji tabela) został wygenerowany:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram"> 
  <returnid> 
    <x>4</x> 
    <y>5</y> 
  </returnid> 
</ROOT>

Aby przetestować kwerendę XPath próbki względem schematu

  1. Skopiuj updategram powyżej i wkleić go do pliku tekstowego.Zapisz plik jako returnId.xml Updategram.

  2. Tworzenie i używanie skryptu testu 4.0 SQLXML (Sqlxml4test.vbs) do wykonać tego szablonu.

    Aby uzyskać więcej informacji zobaczPrzy użyciu obiektu ADO do wykonywania SQLXML bada 4.0.

E.Za pomocą atrybut updg:guid do generowania unikatowych wartości

W tym przykładzie updategram wstawia rekordu w tabeli Cust i CustOrder.Ponadto updategram generuje unikatową wartość dla atrybutu identyfikator klienta przy użyciu updg:guid atrybut.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <updg:sync >
    <updg:before>
    </updg:before>
    <updg:after updg:returnid="x" >
      <Cust updg:guid="x" >
         <CustID>x</CustID>
         <LastName>Fuller</LastName>
      </Cust>
      <CustOrder>
         <CustID>x</CustID>
         <OrderID>1</OrderID>
      </CustOrder>
    </updg:after>
  </updg:sync>
</ROOT>

Określa updategram returnid atrybut. W rezultacie identyfikatorem GUID, który jest generowany jest zwracany:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <returnid>
    <x>7111BD1A-7F0B-4CEE-B411-260DADFEFA2A</x> 
  </returnid>
</ROOT>

Aby przetestować updategram

  1. Skopiuj updategram powyżej i wkleić go do pliku tekstowego.Zapisz plik jako GenerateGuid.xml Updategram.

  2. Utwórz następujące tabele:

    USE tempdb
    CREATE TABLE Cust (CustID uniqueidentifier, LastName varchar(20))
    CREATE TABLE CustOrder (CustID uniqueidentifier, OrderID int)
    
  3. Tworzenie i używanie skryptu testu 4.0 SQLXML (Sqlxml4test.vbs) do wykonać tego szablonu.

    Aby uzyskać więcej informacji zobaczPrzy użyciu obiektu ADO do wykonywania SQLXML bada 4.0.

F.Określanie schematu w updategram

Updategram w tym przykładzie wstawia rekordu w tabela poniżej:

CustOrder(OrderID, EmployeeID, OrderType)

W tym updategram określono schematu XSD (to znaczy, brak domyślnej mapowania updategram elementów i atrybutów).Schemat zawiera niezbędne mapowanie elementów i atrybutów do bazy danych, tabel i kolumn.

Zawiera opis następujących schematu (CustOrderSchema.xml) <CustOrder> element, który składa się z Identyfikator zamówienia and Pole IDPracownika atrybuty.Aby utworzyć schemat bardziej interesujące, wartością domyślną jest przypisany do Pole IDPracownika atrybut. An updategram używa atrybutu wartość domyślną tylko dla operacji wstawiania, a następnie tylko wtedy, gdy updategram nie określa, że dany atrybut.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
  <xsd:element name="CustOrder" >
   <xsd:complexType>
        <xsd:attribute name="OrderID"     type="xsd:integer" /> 
        <xsd:attribute name="EmployeeID"  type="xsd:integer" />
        <xsd:attribute name="OrderType  " type="xsd:integer" default="1"/>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

To updategram wstawia rekordu do tabela CustOrder.The updategram określa tylko identyfikator zamówienia i IDPracownika wartości atrybut.Wartość atrybut OrderType nie są określone.Dlatego updategram używa domyślnej wartości atrybut IDPracownika, który jest określona w poprzednim schemacie.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"
             xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync mapping-schema='CustOrderSchema.xml'>
<updg:after>
       <CustOrder OrderID="98000" EmployeeID="1" />
</updg:after>
</updg:sync>
</ROOT>

Aby uzyskać więcej przykładów updategrams określające mapowanie schematu Zobacz Określanie adnotacjami mapowanie schematu w Updategram (SQLXML 4.0).

Aby przetestować updategram

  1. Tworzenie tabela w tempdb bazy danych:

    USE tempdb
    CREATE TABLE CustOrder(
                     OrderID int, 
                     EmployeeID int, 
                     OrderType int)
    
  2. Skopiuj schematu powyżej i wkleić go do pliku tekstowego.Zapisz plik jako CustOrderSchema.xml.

  3. Skopiuj updategram powyżej i wkleić go do pliku tekstowego.Zapisz plik jako CustOrderUpdategram.xml w tym samym folderze, które są używane w poprzednim kroku.

  4. Tworzenie i wykonać updategram za pomocą skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).

    Aby uzyskać więcej informacji zobaczPrzy użyciu obiektu ADO do wykonywania SQLXML bada 4.0.

Jest to równoważne schematu XDR:

<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
 <ElementType name="CustOrder" >
    <AttributeType name="OrderID" />
    <AttributeType name="EmployeeID" />
    <AttributeType name="OrderType" default="1" />
    <attribute type="OrderID"  />
    <attribute type="EmployeeID" />
    <attribute type="OrderType" />
  </ElementType>
</Schema>

G.Za pomocą atrybut xsi: nil wstawić wartości null kolumna

Jeśli chcesz wstawić wartość null w odpowiedniej kolumnie w tabela, można określić xsi:nil atrybut w elemencie w updategram. W odpowiednich schematu XSD the XSD nillable atrybut musi być także określona.

Na przykład należy wziąć pod uwagę tego schematu XSD:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Student" sql:relation="Students">
  <xsd:complexType>
    <xsd:all>
      <xsd:element name="fname" sql:field="first_name" 
                                type="xsd:string" 
                                 nillable="true"/>
    </xsd:all>
    <xsd:attribute name="SID" 
                        sql:field="StudentID"
                        type="xsd:ID"/>    
    <xsd:attribute name="lname"     
                        sql:field="last_name"
                        type="xsd:string"/>
    <xsd:attribute name="minitial"  
                        sql:field="middle_initial" 
                        type="xsd:string"/>
    <xsd:attribute name="years"     
                         sql:field="no_of_years"
                         type="xsd:integer"/>
  </xsd:complexType>
 </xsd:element>
</xsd:schema>

Określa schematu XSD nillable="true" dla <fname> element. Następujące updategram używa tego schematu:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"
      xmlns:updg="urn:schemas-microsoft-com:xml-updategram"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<updg:sync mapping-schema='StudentSchema.xml'>
  <updg:before/>
  <updg:after>
    <Student SID="S00004" lname="Elmaci" minitial="" years="2">
      <fname xsi:nil="true">
    </fname>
    </Student>
  </updg:after>
</updg:sync>

</ROOT>

Określa updategram xsi:nil dla <fname> element <after> blok. W związku z tym podczas wykonywania tej updategram jest wstawiana wartość NULL kolumna Imię w tabela.

Aby przetestować updategram

  1. Utwórz następującą tabela w tempdb bazy danych:

    USE tempdb
    CREATE TABLE Students (
       StudentID char(6)NOT NULL ,
       first_name varchar(50),
       last_name varchar(50),
       middle_initial char(1),
       no_of_years int NULL)
    GO
    
  2. Skopiuj schematu powyżej i wkleić go do pliku tekstowego.Zapisz plik jako StudentSchema.xml.

  3. Skopiuj updategram powyżej i wkleić go do pliku tekstowego.Zapisz plik jako StudentUpdategram.xml w tym samym folderze, które są używane w poprzednim kroku zapisać StudentSchema.xml.

  4. Tworzenie i wykonać updategram za pomocą skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).

    Aby uzyskać więcej informacji zobaczPrzy użyciu obiektu ADO do wykonywania SQLXML bada 4.0.

H.Określanie nazw w updategram

An updategram mogą mieć elementy należące do obszaru nazw zadeklarowane w ten sam element the updategram.W takim przypadek odpowiedni schemat musi również zadeklarować, ten sam obszar nazw i element, trzeba należeć do docelowego obszaru nazw.

Na przykład w następującym updategram (ElementHavingNamespace.xml UpdateGram) <Zamówienia> element należy do obszaru nazw zadeklarowane w elemencie.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <updg:sync mapping-schema='XSD-ElementHavingNameSpace.xml'>
    <updg:after>
       <x:Order  xmlns:x="https://server/xyz/schemas/"
             updg:at-identity="SalesOrderID" 
             RevisionNumber="1"
             OrderDate="2001-07-01 00:00:00.000"
             DueDate="2001-07-13 00:00:00.000"
             OnlineOrderFlag="0"
             CustomerID="676"
             ContactID="378"
             BillToAddressID="985"
             ShipToAddressID="985"
             ShipMethodID="5"
             SubTotal="24643.9362"
             TaxAmt="1971.5149"
             Freight="616.0984"
             rowguid="00009999-8888-7777-6666-554433221100"
             ModifiedDate="2001-07-08 00:00:00.000" />
    </updg:after>
  </updg:sync>
</ROOT>

W takim przypadek schematu musi również zadeklarować obszaru nazw, jak pokazano na tym schemacie:

Następujące schematu (ElementHavingNamespace.xml XSD) pokazuje, w jaki sposób należy zadeklarować odpowiednich elementów i atrybutów.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     xmlns:dt="urn:schemas-microsoft-com:datatypes" 
     xmlns:sql="urn:schemas-microsoft-com:mapping-schema"  
     xmlns:x="https://server/xyz/schemas/" 
     targetNamespace="https://server/xyz/schemas/" >
  <xsd:element name="Order" sql:relation="Sales.SalesOrderHeader" type="x:Order_type"/>
  <xsd:complexType name="Order_type">
    <xsd:attribute name="SalesOrderID"  type="xsd:ID"/>
    <xsd:attribute name="RevisionNumber" type="xsd:unsignedByte"/>
    <xsd:attribute name="OrderDate" type="xsd:dateTime"/>
    <xsd:attribute name="DueDate" type="xsd:dateTime"/>
    <xsd:attribute name="ShipDate" type="xsd:dateTime"/>
    <xsd:attribute name="Status" type="xsd:unsignedByte"/>
    <xsd:attribute name="OnlineOrderFlag" type="xsd:boolean"/>
    <xsd:attribute name="SalesOrderNumber" type="xsd:string"/>
    <xsd:attribute name="PurchaseOrderNumber" type="xsd:string"/>
    <xsd:attribute name="AccountNumber" type="xsd:string"/>
    <xsd:attribute name="CustomerID" type="xsd:int"/>
    <xsd:attribute name="ContactID" type="xsd:int"/>
    <xsd:attribute name="SalesPersonID" type="xsd:int"/>
    <xsd:attribute name="TerritoryID" type="xsd:int"/>
    <xsd:attribute name="BillToAddressID" type="xsd:int"/>
    <xsd:attribute name="ShipToAddressID" type="xsd:int"/>
    <xsd:attribute name="ShipMethodID" type="xsd:int"/>
    <xsd:attribute name="CreditCardID" type="xsd:int"/>
    <xsd:attribute name="CreditCardApprovalCode" type="xsd:string"/>
    <xsd:attribute name="CurrencyRateID" type="xsd:int"/>
    <xsd:attribute name="SubTotal" type="xsd:decimal"/>
    <xsd:attribute name="TaxAmt" type="xsd:decimal"/>
    <xsd:attribute name="Freight" type="xsd:decimal"/>
    <xsd:attribute name="TotalDue" type="xsd:decimal"/>
    <xsd:attribute name="Comment" type="xsd:string"/>
    <xsd:attribute name="rowguid" type="xsd:string"/>
    <xsd:attribute name="ModifiedDate" type="xsd:dateTime"/>
  </xsd:complexType>
</xsd:schema>

Aby przetestować updategram

  1. Skopiuj schematu powyżej i wkleić go do pliku tekstowego.Zapisz plik jako ElementHavingNamespace.xml XSD.

  2. Skopiuj updategram powyżej i wkleić go do pliku tekstowego.Zapisz plik jako ElementHavingNamespace.xml Updategram w tym samym folderze, używany do zapisywania ElementHavingnamespace.xml XSD.

  3. Tworzenie i wykonać updategram za pomocą skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).

    Aby uzyskać więcej informacji zobaczPrzy użyciu obiektu ADO do wykonywania SQLXML bada 4.0.

I.Kolumna typu Wstawianie danych do danych XML

The xml data type was introduced in SQL Server 2005.Updategrams służy do wstawiania i aktualizacji danych przechowywanych w xml Typ danych kolumny z następującymi przepisami:

  • The xml kolumna cannot be used for identifying an existing row. Dlatego nie mogą być uwzględniane w updg:before sekcja updategram.

  • Obszary nazw, które znajdują się w zakresie fragmentu XML do xml kolumna zostaną zachowane i ich deklaracji obszaru nazw są dodawane do górnego elementu wstawiony fragment.

Na przykład w następującym updategram (SampleUpdateGram.xml) <Opis> element aktualizuje kolumna ProductDescription w produkcji>Tabela productModel przykładowej bazy danych AdventureWorks. Wynik to updategram są zawartości XML kolumna ProductDescription aktualizacji zawartości XML <Opis> element.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
    <updg:sync mapping-schema="SampleSchema.xml" >
       <updg:before>
<ProductModel ProductModelID="19">
   <Name>Mountain-100</Name>
</ProductModel>
    </updg:before>
    <updg:after>
 <ProductModel>
    <Name>Mountain-100</Name>
    <Desc><?xml-stylesheet href="ProductDescription.xsl" type="text/xsl"?>
        <p1:ProductDescription xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription" 
              xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain" 
              xmlns:wf="https://www.adventure-works.com/schemas/OtherFeatures" 
              xmlns:html="http://www.w3.org/1999/xhtml" 
              >
  <p1:Summary>
     <html:p>Insert Example</html:p>
  </p1:Summary>
  <p1:Manufacturer>
    <p1:Name>AdventureWorks</p1:Name>
    <p1:Copyright>2002</p1:Copyright>
    <p1:ProductURL>HTTP://www.Adventure-works.com</p1:ProductURL>
  </p1:Manufacturer>
  <p1:Features>These are the product highlights. 
    <wm:Warranty>
       <wm:WarrantyPeriod>3 years</wm:WarrantyPeriod>
       <wm:Description>parts and labor</wm:Description>
    </wm:Warranty>
    <wm:Maintenance>
       <wm:NoOfYears>10 years</wm:NoOfYears>
       <wm:Description>maintenance contract available through your dealer or any AdventureWorks retail store.</wm:Description>
    </wm:Maintenance>
    <wf:wheel>High performance wheels.</wf:wheel>
    <wf:saddle>
      <html:i>Anatomic design</html:i> and made from durable leather for a full-day of riding in comfort.</wf:saddle>
    <wf:pedal>
       <html:b>Top-of-the-line</html:b> clipless pedals with adjustable tension.</wf:pedal>
    <wf:BikeFrame>Each frame is hand-crafted in our Bothell facility to the optimum diameter and wall-thickness required of a premium mountain frame. The heat-treated welded aluminum frame has a larger diameter tube that absorbs the bumps.</wf:BikeFrame>
    <wf:crankset> Triple crankset; alumunim crank arm; flawless shifting. </wf:crankset>
   </p1:Features>
   <p1:Picture>
      <p1:Angle>front</p1:Angle>
      <p1:Size>small</p1:Size>
      <p1:ProductPhotoID>118</p1:ProductPhotoID>
   </p1:Picture>
   <p1:Specifications> These are the product specifications.
     <Material>Almuminum Alloy</Material>
     <Color>Available in most colors</Color>
     <ProductLine>Mountain bike</ProductLine>
     <Style>Unisex</Style>
     <RiderExperience>Advanced to Professional riders</RiderExperience>
   </p1:Specifications>
  </p1:ProductDescription>
 </Desc>
      </ProductModel>
    </updg:after>
  </updg:sync>
</ROOT>

The updategram odnosi się do następującego schematu XSD adnotacjami (SampleSchema.xml).

<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
           xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
           xmlns="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription"> 
  <xsd:element name="ProductModel"  sql:relation="Production.ProductModel" >
     <xsd:complexType>
       <xsd:sequence>
          <xsd:element name="Name" type="xsd:string"></xsd:element>
          <xsd:element name="Desc" sql:field="CatalogDescription" sql:datatype="xml">
           <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="ProductDescription">
                 <xsd:complexType>
                   <xsd:sequence>
                     <xsd:element name="Summary" type="xsd:anyType">
                     </xsd:element>
                   </xsd:sequence>
                 </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
           </xsd:complexType>
          </xsd:element> 
       </xsd:sequence>
       <xsd:attribute name="ProductModelID" sql:field="ProductModelID"/>
     </xsd:complexType>
  </xsd:element>
</xsd:schema>

Aby przetestować updategram

  1. Skopiuj schematu powyżej i wkleić go do pliku tekstowego.Zapisz plik jako SampleSchema.xml XSD.

    Uwaga

    Ponieważ updategrams obsługują domyślnego odwzorowania, nie ma możliwości do identyfikowania początek i koniec xml Typ danych. Skutecznie oznacza, że schemat mapowania wymaganych podczas wstawiania lub aktualizowania tabel z xml Typ danych kolumny. Schemat nie zostanie podana, SQLXML zwraca błąd, co oznacza, że jedna z kolumn z tabela.

  2. Skopiuj updategram powyżej i wkleić go do pliku tekstowego.Zapisz plik jako SampleUpdategram.xml w tym samym folderze, używany do zapisywania SampleSchema.xml.

  3. Tworzenie i wykonać updategram za pomocą skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).

    Aby uzyskać więcej informacji zobaczPrzy użyciu obiektu ADO do wykonywania SQLXML bada 4.0.