Share via


Mise à jour de données à l'aide de codes de mise à jour (updategrams) XML (SQLXML 4.0)

S’applique à :SQL ServerAzure SQL Database

Lorsque vous mettez à jour des données existantes, vous devez spécifier les <blocs avant> et <après> . Les éléments spécifiés dans les <blocs avant> et <après> décrivent la modification souhaitée. Le code de mise à jour utilise le ou les éléments spécifiés dans le <bloc avant> pour identifier le ou les enregistrements existants dans la base de données. Le ou les éléments correspondants dans le <bloc après> indiquent à quoi doivent ressembler les enregistrements après l’exécution de l’opération de mise à jour. À partir de ces informations, le code de mise à jour crée une instruction SQL qui correspond au <bloc après> . Le code de mise à jour (updategram) utilise ensuite cette instruction pour mettre à jour la base de données.

Voici le format du code de mise à jour (updategram) pour une opération de mise à jour :

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

<updg:before>
Les éléments du <bloc avant> identifient les enregistrements existants dans les tables de base de données.

<updg:after>
Les éléments du <bloc après> décrivent la façon dont les enregistrements spécifiés dans le <bloc avant> doivent se comporter après l’application des mises à jour.

L’attribut mapping-schema identifie le schéma de mappage à utiliser par le code de mise à jour. Si le code de mise à jour spécifie un schéma de mappage, les noms d’éléments et d’attributs spécifiés dans les <blocs avant> et <après> doivent correspondre aux noms du schéma. Le schéma de mappage mappe ces noms d'éléments ou d'attributs aux noms de tables et de colonnes de la base de données.

Si le code de mise à jour (updategram) ne spécifie pas de schéma, le mappage par défaut est utilisé. Dans le mappage par défaut, l’ÉlémentName<> spécifié dans le code de mise à jour est mappé à la table de base de données et les éléments ou attributs enfants sont mappés aux colonnes de la base de données.

Un élément du <bloc avant> ne doit correspondre qu’à une seule ligne de table dans la base de données. Si l’élément correspond à plusieurs lignes de table ou ne correspond à aucune ligne de table, le code de mise à jour retourne une erreur et annule l’intégralité <du bloc de synchronisation> .

Un code de mise à jour peut inclure plusieurs <blocs de synchronisation> . Chaque <bloc de synchronisation> est traité comme une transaction. Chaque <bloc de synchronisation> peut avoir plusieurs <blocs avant> et <après> . Par exemple, si vous mettez à jour deux des enregistrements existants, vous pouvez spécifier deux <paires avant> et <après> , une pour chaque enregistrement en cours de mise à jour.

Utilisation de l'attribut updg:id

Lorsque plusieurs éléments sont spécifiés dans les <blocs avant> et <après> , utilisez l’attribut updg:id pour marquer les lignes dans les <blocs avant> et <après> . La logique de traitement utilise ces informations pour déterminer quel enregistrement dans le <bloc avant> est associé à l’enregistrement dans le <bloc après> .

L’attribut updg:id n’est pas nécessaire (bien que recommandé) si l’un des éléments suivants existe :

  • L’attribut sql:key-fields est défini sur les éléments du schéma de mappage spécifié.

  • Il existe une ou plusieurs valeurs spécifiques fournies pour le ou les champs clés dans le code de mise à jour (updategram).

Si l’un ou l’autre est le cas, le code de mise à jour utilise les colonnes clés spécifiées dans les sql:key-fields pour coupler les éléments dans les <blocs avant> et <après> .

Si le schéma de mappage n’identifie pas les colonnes clés (à l’aide de sql:key-fields) ou si le code de mise à jour met à jour une valeur de colonne clé, vous devez spécifier updg:id.

Les enregistrements identifiés dans les <blocs avant> et <après> ne doivent pas être dans le même ordre. L’attribut updg:id force l’association entre les éléments spécifiés dans les <blocs avant> et <après>.

Si vous spécifiez un élément dans le <bloc avant> et un seul élément correspondant dans le <bloc après> , l’utilisation de updg:id n’est pas nécessaire. Toutefois, il est recommandé de spécifier quand même updg:id pour éviter toute ambiguïté.

Exemples

Avant d'utiliser les exemples de code de mise à jour (updategram), notez les points suivants :

  • La plupart des exemples utilisent le mappage par défaut (en d'autres termes, aucun schéma de mappage n'est spécifié dans le code de mise à jour (updategram)). Pour obtenir d’autres exemples de codes de mise à jour qui utilisent des schémas de mappage, consultez Spécification d’un schéma de mappage annoté dans un code de mise à jour (SQLXML 4.0).

  • La plupart des exemples sont basés sur l'exemple de base de données AdventureWorks. Toutes les mises à jour sont appliquées aux tables de cette base de données. Vous pouvez restaurer la base de données AdventureWorks.

R. Mise à jour d'un enregistrement

Le code de mise à jour (updategram) suivant met à jour le nom de famille d'un employé en le remplaçant par Fuller dans la table Person.Contact de la base de données AdventureWorks. Le code de mise à jour (updategram) ne spécifie pas de schéma de mappage ; par conséquent, le mappage par défaut est utilisé.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
<updg:sync >  
<updg:before>  
   <Person.Contact ContactID="1" />  
</updg:before>  
<updg:after>  
   <Person.Contact LastName="Abel-Achong" />  
</updg:after>  
</updg:sync>  
</ROOT>  

L’enregistrement décrit dans le <bloc avant> représente l’enregistrement actif dans la base de données. Le code de mise à jour utilise toutes les valeurs de colonne spécifiées dans le <bloc avant> pour rechercher l’enregistrement. Dans ce code de mise à jour, le <bloc avant> fournit uniquement la colonne ContactID ; par conséquent, le code de mise à jour utilise uniquement la valeur pour rechercher l’enregistrement. Si vous deviez ajouter la valeur de LastName à ce bloc, le code de mise à jour (updategram) utiliserait à la fois les valeurs de ContactID et de LastName pour effectuer la recherche.

Dans ce code de mise à jour, le <bloc après> fournit uniquement la valeur de colonne LastName, car il s’agit de la seule valeur en cours de modification.

Pour tester le code de mise à jour
  1. Copiez le modèle de code de mise à jour (updategram) ci-dessus et collez-le dans un fichier texte. Enregistrez le fichier sous le nom UpdateLastName.xml.

  2. Créez et utilisez le script de test SQLXML 4.0 (Sqlxml4test.vbs) pour exécuter le code de mise à jour (updategram).

    Pour plus d’informations, consultez Utilisation d’ADO pour exécuter des requêtes SQLXML 4.0.

B. Mise à jour de plusieurs enregistrements à l'aide de l'attribut updg:id

Dans cet exemple, le code de mise à jour (updategram) effectue deux mises à jour sur la table HumanResources.Shift de la base de données AdventureWorks :

  • Il modifie le nom de l'équipe de jour d'origine qui commence à 7 h 09 en remplaçant « Day » par « Early Morning ».

  • Il insère une nouvelle équipe nommée « Late Morning » qui commence à 10 h 00.

Dans le code de mise à jour, l’attribut updg:id crée des associations entre les éléments dans les <blocs avant> et <après> .

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
       <HumanResources.Shift updg:id="x" Name="Day" />  
    </updg:before>  
    <updg:after>  
      <HumanResources.Shift updg:id="y" Name="Late Morning"   
                            StartTime="1900-01-01 10:00:00.000"  
                            EndTime="1900-01-01 18:00:00.000"  
                            ModifiedDate="2004-06-01 00:00:00.000"/>  
      <HumanResources.Shift updg:id="x" Name="Early Morning" />  
    </updg:after>  
  </updg:sync>  
</ROOT>  

Notez comment l’attribut updg:id associe la première instance de l’élément <HumanResources.Shift> dans le <bloc avant> à la deuxième instance de l’élément <HumanResources.Shift> dans le <bloc après>.

Pour tester le code de mise à jour
  1. Copiez le modèle de code de mise à jour (updategram) ci-dessus et collez-le dans un fichier texte. Enregistrez le fichier sous le nom UpdateMultipleRecords.xml.

  2. Créez et utilisez le script de test SQLXML 4.0 (Sqlxml4test.vbs) pour exécuter le code de mise à jour (updategram).

    Pour plus d’informations, consultez Utilisation d’ADO pour exécuter des requêtes SQLXML 4.0.

C. Spécification de plusieurs <blocs avant> et <après>

Pour éviter toute ambiguïté, vous pouvez écrire le code de mise à jour dans l’exemple B en utilisant plusieurs <paires de blocs avant> et <après> . La spécification de <paires avant> et <après> est une façon de spécifier plusieurs mises à jour avec un minimum de confusion. En outre, si chacun des <blocs avant> et <après> spécifie au maximum un élément, vous n’avez pas besoin d’utiliser l’attribut updg:id .

Notes

Pour former une paire, la <balise after> doit immédiatement suivre sa balise avant> correspondante<.

Dans le code de mise à jour suivant, la première <paire avant> et <après> met à jour le nom de l’équipe de jour. La seconde paire insère un nouvel enregistrement d'équipe.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
       <HumanResources.Shift ShiftID="1" Name="Day" />  
    </updg:before>  
    <updg:after>  
      <HumanResources.Shift Name="Early Morning" />  
    </updg:after>  
    <updg:before>  
    </updg:before>  
    <updg:after>  
      <HumanResources.Shift Name="Late Morning"   
                            StartTime="1900-01-01 10:00:00.000"  
                            EndTime="1900-01-01 18:00:00.000"  
                            ModifiedDate="2004-06-01 00:00:00.000"/>  
    </updg:after>  
  </updg:sync>  
</ROOT>  
Pour tester le code de mise à jour
  1. Copiez le modèle de code de mise à jour (updategram) ci-dessus et collez-le dans un fichier texte. Enregistrez le fichier sous le nom UpdateMultipleBeforeAfter.xml.

  2. Créez et utilisez le script de test SQLXML 4.0 (Sqlxml4test.vbs) pour exécuter le code de mise à jour (updategram).

    Pour plus d’informations, consultez Utilisation d’ADO pour exécuter des requêtes SQLXML 4.0.

D. Spécification de plusieurs <blocs de synchronisation>

Vous pouvez spécifier plusieurs <blocs de synchronisation> dans un code de mise à jour. Chaque <bloc de synchronisation> spécifié est une transaction indépendante.

Dans le code de mise à jour suivant, le premier <bloc de synchronisation> met à jour un enregistrement dans la table Sales.Customer. Pour des raisons de simplicité, le code de mise à jour (updategram) spécifie uniquement les valeurs de colonne requises, la valeur d'identité (CustomerID) et la valeur mise à jour (SalesPersonID).

Le deuxième <bloc de synchronisation> ajoute deux enregistrements à la table Sales.SalesOrderHeader. Pour cette table, SalesOrderID est une colonne de type IDENTITY. Par conséquent, le code de mise à jour ne spécifie pas la valeur de SalesOrderID dans chacun des <éléments Sales.SalesOrderHeader> .

La spécification de plusieurs <blocs de synchronisation> est utile, car si le deuxième <bloc de synchronisation> (une transaction) ne parvient pas à ajouter des enregistrements à la table Sales.SalesOrderHeader, le premier <bloc de synchronisation> peut toujours mettre à jour l’enregistrement client dans la table Sales.Customer.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
      <Sales.Customer CustomerID="1" SalesPersonID="280" />  
    </updg:before>  
    <updg:after>  
      <Sales.Customer CustomerID="1" SalesPersonID="283" />  
    </updg:after>  
  </updg:sync>  
  <updg:sync >  
    <updg:before>  
    </updg:before>  
    <updg:after>  
   <Sales.SalesOrderHeader   
             CustomerID="1"  
             RevisionNumber="1"  
             OrderDate="2004-07-01 00:00:00.000"  
             DueDate="2004-07-13 00:00:00.000"  
             OnlineOrderFlag="0"  
             ContactID="378"  
             BillToAddressID="985"  
             ShipToAddressID="985"  
             ShipMethodID="5"  
             SubTotal="24643.9362"  
             TaxAmt="1971.5149"  
             Freight="616.0984"  
             rowguid="01010101-2222-3333-4444-556677889900"  
             ModifiedDate="2004-07-08 00:00:00.000" />  
   <Sales.SalesOrderHeader  
             CustomerID="1"  
             RevisionNumber="1"  
             OrderDate="2004-07-01 00:00:00.000"  
             DueDate="2004-07-13 00:00:00.000"  
             OnlineOrderFlag="0"  
             ContactID="378"  
             BillToAddressID="985"  
             ShipToAddressID="985"  
             ShipMethodID="5"  
             SubTotal="1000.0000"  
             TaxAmt="0.0000"  
             Freight="0.0000"  
             rowguid="10101010-2222-3333-4444-556677889900"  
             ModifiedDate="2004-07-09 00:00:00.000" />  
    </updg:after>  
  </updg:sync>  
</ROOT>  
Pour tester le code de mise à jour
  1. Copiez le modèle de code de mise à jour (updategram) ci-dessus et collez-le dans un fichier texte. Enregistrez le fichier sous le nom UpdateMultipleSyncs.xml.

  2. Créez et utilisez le script de test SQLXML 4.0 (Sqlxml4test.vbs) pour exécuter le code de mise à jour (updategram).

    Pour plus d’informations, consultez Utilisation d’ADO pour exécuter des requêtes SQLXML 4.0.

E. Utilisation d'un schéma de mappage

Dans cet exemple, le programme de mise à jour spécifie un schéma de mappage à l’aide de l’attribut mapping-schema . (Il n'y a aucun mappage par défaut ; en d'autres termes, le schéma de mappage fournit le mappage nécessaire des éléments et attributs du code de mise à jour (updategram) aux tables et colonnes de la base de données.)

Les éléments et attributs spécifiés dans le code de mise à jour (updategram) font référence aux éléments et attributs du schéma de mappage.

Le schéma de mappage XSD suivant contient <des éléments Customer>, <Order> et <OD> qui sont mappés aux tables Sales.Customer, Sales.SalesOrderHeader et Sales.SalesOrderDetail dans la base de données.

<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="CustomerOrder"  
          parent="Sales.Customer"  
          parent-key="CustomerID"  
          child="Sales.SalesOrderHeader"  
          child-key="CustomerID" />  
  
    <sql:relationship name="OrderOD"  
          parent="Sales.SalesOrderHeader"  
          parent-key="SalesOrderID"  
          child="Sales.SalesOrderDetail"  
          child-key="SalesOrderID" />  
  </xsd:appinfo>  
</xsd:annotation>  
  
  <xsd:element name="Customer" sql:relation="Sales.Customer" >  
   <xsd:complexType>  
     <xsd:sequence>  
        <xsd:element name="Order"   
                     sql:relation="Sales.SalesOrderHeader"  
                     sql:relationship="CustomerOrder" >  
           <xsd:complexType>  
              <xsd:sequence>  
                <xsd:element name="OD"   
                             sql:relation="Sales.SalesOrderDetail"  
                             sql:relationship="OrderOD" >  
                 <xsd:complexType>  
                  <xsd:attribute name="SalesOrderID" type="xsd:integer" />  
                  <xsd:attribute name="ProductID" type="xsd:integer" />  
                  <xsd:attribute name="UnitPrice" type="xsd:decimal" />  
                  <xsd:attribute name="OrderQty" type="xsd:integer" />  
                  <xsd:attribute name="UnitPriceDiscount" type="xsd:decimal" />   
                 </xsd:complexType>  
                </xsd:element>  
              </xsd:sequence>  
              <xsd:attribute name="CustomerID" type="xsd:string" />  
              <xsd:attribute name="SalesOrderID" type="xsd:integer" />  
              <xsd:attribute name="OrderDate" type="xsd:date" />  
           </xsd:complexType>  
        </xsd:element>  
      </xsd:sequence>  
      <xsd:attribute name="CustomerID"   type="xsd:string" />   
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  

Ce schéma de mappage (UpdategramMappingSchema.xml) est spécifié dans le code de mise à jour (updategram) suivant. Le code de mise à jour (updategram) ajoute un article dans la table Sales.SalesOrderDetail pour une commande spécifique. Le programme de mise à jour inclut des éléments imbriqués : un <élément OD> imbriqué à l’intérieur d’un <élément Order> . La relation clé primaire/clé étrangère entre ces deux éléments est spécifiée dans le schéma de mappage.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync mapping-schema="UpdategramMappingSchema.xml" >  
    <updg:before>  
       <Order SalesOrderID="43659" />  
    </updg:before>  
    <updg:after>  
      <Order SalesOrderID="43659" >  
          <OD ProductID="776" UnitPrice="2329.0000"  
              OrderQty="2" UnitPriceDiscount="0.0" />  
      </Order>  
    </updg:after>  
  </updg:sync>  
</ROOT>  
Pour tester le code de mise à jour
  1. Copiez le schéma de mappage ci-dessus et collez-le dans un fichier texte. Enregistrez le fichier sous le nom UpdategramMappingSchema.xml.

  2. Copiez le modèle de code de mise à jour (updategram) ci-dessus et collez-le dans un fichier texte. Enregistrez le fichier sous le nom UpdateWithMappingSchema.xml dans le même dossier que celui utilisé pour l'enregistrement du schéma de mappage (UpdategramMappingSchema.xml).

  3. Créez et utilisez le script de test SQLXML 4.0 (Sqlxml4test.vbs) pour exécuter le code de mise à jour (updategram).

    Pour plus d’informations, consultez Utilisation d’ADO pour exécuter des requêtes SQLXML 4.0.

Pour plus d’exemples de mises à jour qui utilisent des schémas de mappage, consultez Spécification d’un schéma de mappage annoté dans un updategram (SQLXML 4.0) .

F. Utilisation d'un schéma de mappage avec les attributs IDREFS

Cet exemple montre comment les codes de mise à jour (updategrams) utilisent les attributs IDREFS du schéma de mappage pour mettre à jour des enregistrements dans plusieurs tables. Pour cet exemple, supposez que la base de données comporte les tables suivantes :

  • Student(StudentID, LastName)

  • Course(CourseID, CourseName)

  • Enrollment(StudentID, CourseID)

Dans la mesure où un étudiant peut s'inscrire à de nombreux cours et comme un cours peut avoir de nombreux étudiants, la troisième table, la table Enrollment, est requise pour représenter cette relation M:N.

Le schéma de mappage XSD suivant fournit une vue XML des tables à l’aide <des éléments Student>, <Course> et <Enrollment> . Les attributs IDREFS dans le schéma de mappage spécifient la relation entre ces éléments. L’attribut StudentIDList de l’élément <Course> est un attribut de type IDREFS qui fait référence à la colonne StudentID de la table Inscription. De même, l’attribut EnrolledIn de l’élément <Student> est un attribut de type IDREFS qui fait référence à la colonne CourseID dans la table Inscription.

<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="StudentEnrollment"  
          parent="Student"  
          parent-key="StudentID"  
          child="Enrollment"  
          child-key="StudentID" />  
  
    <sql:relationship name="CourseEnrollment"  
          parent="Course"  
          parent-key="CourseID"  
          child="Enrollment"  
          child-key="CourseID" />  
  </xsd:appinfo>  
</xsd:annotation>  
  
  <xsd:element name="Course" sql:relation="Course"   
                             sql:key-fields="CourseID" >  
    <xsd:complexType>  
    <xsd:attribute name="CourseID"  type="xsd:string" />   
    <xsd:attribute name="CourseName"   type="xsd:string" />   
    <xsd:attribute name="StudentIDList" sql:relation="Enrollment"  
                 sql:field="StudentID"  
                 sql:relationship="CourseEnrollment"   
                                     type="xsd:IDREFS" />  
  
    </xsd:complexType>  
  </xsd:element>  
  <xsd:element name="Student" sql:relation="Student" >  
    <xsd:complexType>  
    <xsd:attribute name="StudentID"  type="xsd:string" />   
    <xsd:attribute name="LastName"   type="xsd:string" />   
    <xsd:attribute name="EnrolledIn" sql:relation="Enrollment"  
                 sql:field="CourseID"  
                 sql:relationship="StudentEnrollment"   
                                     type="xsd:IDREFS" />  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  

Chaque fois que vous spécifiez ce schéma dans un code de mise à jour (updategram) et que vous insérez un enregistrement dans la table Course, le code de mise à jour (updategram) insère un nouvel enregistrement de cours dans la table Course. Si vous spécifiez un ou plusieurs nouveaux ID d'étudiants pour l'attribut StudentIDList, le code de mise à jour (updategram) insère également un enregistrement dans la table Enrollment pour chaque nouvel étudiant. Le code de mise à jour (updategram) s'assure qu'aucun doublon n'est ajouté à la table Enrollment.

Pour tester le code de mise à jour
  1. Créez ces tables dans la base de données spécifiée dans la racine virtuelle :

    CREATE TABLE Student(StudentID varchar(10) primary key,   
                         LastName varchar(25))  
    CREATE TABLE Course(CourseID varchar(10) primary key,   
                        CourseName varchar(25))  
    CREATE TABLE Enrollment(StudentID varchar(10)   
                                      references Student(StudentID),  
                           CourseID varchar(10)   
                                      references Course(CourseID))  
    
  2. Ajoutez les exemples de données suivants :

    INSERT INTO Student VALUES ('S1','Davoli')  
    INSERT INTO Student VALUES ('S2','Fuller')  
    
    INSERT INTO Course VALUES  ('CS101', 'C Programming')  
    INSERT INTO Course VALUES  ('CS102', 'Understanding XML')  
    
    INSERT INTO Enrollment VALUES ('S1', 'CS101')  
    INSERT INTO Enrollment VALUES ('S1', 'CS102')  
    
  3. Copiez le schéma de mappage ci-dessus et collez-le dans un fichier texte. Enregistrez le fichier sous le nom SampleSchema.xml.

  4. Enregistrez le code de mise à jour (SampleUpdategram) dans le même dossier que celui utilisé pour l'enregistrement du schéma de mappage à l'étape précédente. (Ce code de mise à jour (updategram) supprime un étudiant pour lequel StudentID="1" dans le cours CS102.)

    <ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
      <updg:sync mapping-schema="SampleSchema.xml" >  
        <updg:before>  
            <Student updg:id="x" StudentID="S1" LastName="Davolio"  
                                 EnrolledIn="CS101 CS102" />  
        </updg:before>  
        <updg:after >  
            <Student updg:id="x" StudentID="S1" LastName="Davolio"  
                                 EnrolledIn="CS101" />  
        </updg:after>  
      </updg:sync>  
    </ROOT>  
    
  5. Créez et utilisez le script de test SQLXML 4.0 (Sqlxml4test.vbs) pour exécuter le code de mise à jour (updategram).

    Pour plus d’informations, consultez Utilisation d’ADO pour exécuter des requêtes SQLXML 4.0.

  6. Enregistrez et exécutez le code de mise à jour (updategram) suivant, comme décrit dans les étapes précédentes. Le code de mise à jour (updategram) rajoute l'étudiant pour lequel StudentID="1" dans le cours CS102 en insérant un enregistrement dans la table Enrollment.

    <ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
      <updg:sync mapping-schema="SampleSchema.xml" >  
        <updg:before>  
            <Student updg:id="x" StudentID="S1" LastName="Davolio"  
                                 EnrolledIn="CS101" />  
        </updg:before>  
        <updg:after >  
            <Student updg:id="x" StudentID="S1" LastName="Davolio"  
                                 EnrolledIn="CS101 CS102" />  
        </updg:after>  
      </updg:sync>  
    </ROOT>  
    
  7. Enregistrez et exécutez ce prochain programme de mise à jour, comme décrit dans les étapes précédentes. Ce code de mise à jour (updategram) insère trois nouveaux étudiants et les inscrit au cours CS101. À nouveau, la relation IDREFS insère des enregistrements dans la table Enrollment.

    <ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
      <updg:sync mapping-schema="SampleSchema.xml" >  
        <updg:before>  
           <Course updg:id="y" CourseID="CS101"   
                               CourseName="C Programming" />  
        </updg:before>  
        <updg:after >  
           <Student updg:id="x1" StudentID="S3" LastName="Leverling" />  
           <Student updg:id="x2" StudentID="S4" LastName="Pecock" />  
           <Student updg:id="x3" StudentID="S5" LastName="Buchanan" />  
           <Course updg:id="y" CourseID="CS101"  
                               CourseName="C Programming"  
                               StudentIDList="S3 S4 S5" />  
        </updg:after>  
      </updg:sync>  
    </ROOT>  
    

Voici le schéma XDR équivalent :

<?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="Enrollment" sql:relation="Enrollment" sql:key-fields="StudentID CourseID">  
    <AttributeType name="StudentID" dt:type="id" />  
    <AttributeType name="CourseID" dt:type="id" />  
  
    <attribute type="StudentID" />  
    <attribute type="CourseID" />  
  </ElementType>  
  <ElementType name="Course" sql:relation="Course" sql:key-fields="CourseID">  
    <AttributeType name="CourseID" dt:type="id" />  
    <AttributeType name="CourseName" />  
  
    <attribute type="CourseID" />  
    <attribute type="CourseName" />  
  
    <AttributeType name="StudentIDList" dt:type="idrefs" />  
    <attribute type="StudentIDList" sql:relation="Enrollment" sql:field="StudentID" >  
        <sql:relationship  
                key-relation="Course"  
                key="CourseID"  
                foreign-relation="Enrollment"  
                foreign-key="CourseID" />  
    </attribute>  
  
  </ElementType>  
  <ElementType name="Student" sql:relation="Student">  
    <AttributeType name="StudentID" dt:type="id" />  
     <AttributeType name="LastName" />  
  
    <attribute type="StudentID" />  
    <attribute type="LastName" />  
  
    <AttributeType name="EnrolledIn" dt:type="idrefs" />  
    <attribute type="EnrolledIn" sql:relation="Enrollment" sql:field="CourseID" >  
        <sql:relationship  
                key-relation="Student"  
                key="StudentID"  
                foreign-relation="Enrollment"  
                foreign-key="StudentID" />  
    </attribute>  
  
    <element type="Enrollment" sql:relation="Enrollment" >  
        <sql:relationship key-relation="Student"  
                          key="StudentID"  
                          foreign-relation="Enrollment"  
                          foreign-key="StudentID" />  
    </element>  
  </ElementType>  
  
</Schema>  

Pour plus d’exemples de mises à jour qui utilisent des schémas de mappage, consultez Spécification d’un schéma de mappage annoté dans un updategram (SQLXML 4.0) .

Voir aussi

Considérations de sécurité relatives au code de mise à jour (updategram) (SQLXML 4.0)