Partager via


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

Lorsque vous mettez à jour les 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 les éléments spécifiés dans le <bloc avant> pour identifier les enregistrements existants dans la base de données. Le ou les éléments correspondants dans le <bloc après> indiquent comment les enregistrements doivent s’occuper de 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 utilise ensuite cette instruction pour mettre à jour la base de données.

Il s’agit du format de code de mise à jour 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 précédent> 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 précédent> doivent s’occuper de 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 la table de base de données et des colonnes.

Si un code de mise à jour ne spécifie pas de schéma, updategam utilise le mappage par défaut. Dans le mappage par défaut, ElementName> 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 base de données.<

Un élément du <bloc avant> doit correspondre à 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 mis à 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 l’enregistrement dans les <paires de blocs antérieures> avec 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 :

  • Les éléments du schéma de mappage spécifié ont l’attribut sql:key-fields défini sur eux.

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

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

Si le schéma de mappage n’identifie pas les colonnes clés (à l’aide sql:key-fieldsde ) 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> n’ont pas besoin d’ê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 qu’un seul élément correspondant dans le <bloc après> , l’utilisation updg:id n’est pas nécessaire. Toutefois, il est recommandé de spécifier updg:id quoi qu’il en soit pour éviter toute ambiguïté.

Exemples

Avant d’utiliser les exemples de code de mise à jour, notez les points suivants :

  • La plupart des exemples utilisent le mappage par défaut (autrement dit, aucun schéma de mappage n’est spécifié dans le code de mise à jour). Pour plus d’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 utilisent 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.

Un. Mise à jour d’un enregistrement

Le code de mise à jour suivant met à jour le nom de l’employé sur Fuller dans la table Person.Contact dans la base de données AdventureWorks. Le code de mise à jour ne spécifie aucun schéma de mappage ; par conséquent, le code de mise à jour utilise le mappage par défaut.

<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 précédent> 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 LastName à ce bloc, le code de mise à jour utilise à la fois les valeurs ContactID et LastName pour effectuer une 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 qui est modifiée.

Pour tester le code de mise à jour
  1. Copiez le modèle de code de mise à jour ci-dessus et collez-le dans un fichier texte. Enregistrez le fichier en tant que UpdateLastName.xml.

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

    Pour plus d'informations, voir 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 effectue deux mises à jour sur la table HumanResources.Shift dans la base de données AdventureWorks :

  • Il remplace le nom du poste de jour d’origine qui commence à 17h00 par « Jour » par « Tôt le matin ».

  • Il insère un nouveau décalage nommé « Late Morning » qui commence à 10h00.

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 précédent> avec 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 ci-dessus et collez-le dans un fichier texte. Enregistrez le fichier en tant que UpdateMultipleRecords.xml.

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

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

Chapitre 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 avant<> et <après> des paires 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 plus un élément, vous n’avez pas besoin d’utiliser l’attribut updg:id .

Remarque

Pour former une paire, l’étiquette <après> doit immédiatement suivre sa balise correspondante< avant> la balise.

Dans le code de mise à jour suivant, le premier <avant> et <après> la paire met à jour le nom du décalage pour le décalage de jour. La deuxième paire insère un nouvel enregistrement de décalage.

<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 ci-dessus et collez-le dans un fichier texte. Enregistrez le fichier en tant que UpdateMultipleBeforeAfter.xml.

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

    Pour plus d'informations, voir 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. Par souci de simplicité, le code de mise à jour spécifie uniquement les valeurs de colonne requises ; valeur d’identité (CustomerID) et 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 ci-dessus et collez-le dans un fichier texte. Enregistrez le fichier en tant que UpdateMultipleSyncs.xml.

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

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

E. Utilisation d’un schéma de mappage

Dans cet exemple, le code de mise à jour spécifie un schéma de mappage à l’aide de l’attribut mapping-schema . (Il n’existe aucun mappage par défaut ; autrement dit, le schéma de mappage fournit le mappage nécessaire d’éléments et d’attributs dans le code de mise à jour aux tables et colonnes de base de données.)

Les éléments et attributs spécifiés dans le code de mise à jour 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> 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 suivant. Le code de mise à jour ajoute un élément de détail de commande dans la table Sales.SalesOrderDetail pour une commande spécifique. Le code 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 en tant que UpdategramMappingSchema.xml.

  2. Copiez le modèle de code de mise à jour ci-dessus et collez-le dans un fichier texte. Enregistrez le fichier en tant que UpdateWithMappingSchema.xml dans le même dossier que celui utilisé pour enregistrer le 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.

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

Pour plus d’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).

F. Utilisation d’un schéma de mappage avec des attributs IDREFS

Cet exemple montre comment les tableaux de mise à jour utilisent les attributs IDREFS dans le schéma de mappage pour mettre à jour les enregistrements dans plusieurs tables. Pour cet exemple, supposons que la base de données se compose des tables suivantes :

  • Student(StudentID, LastName)

  • Course(CourseID, CourseName)

  • Inscription(StudentID, CourseID)

Étant donné qu’un étudiant peut s’inscrire à de nombreux cours et qu’un cours peut avoir de nombreux étudiants, le troisième tableau, la table Inscription, est nécessaire 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 sur 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 En enrollmentIn sur 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 et que vous insérez un enregistrement dans la table Cours, le code de mise à jour insère un nouvel enregistrement de cours dans la table Cours. Si vous spécifiez un ou plusieurs ID d’étudiant pour l’attribut StudentIDList, le code de mise à jour insère également un enregistrement dans la table Inscription pour chaque nouvel étudiant. Le code de mise à jour garantit qu’aucun doublon n’est ajouté à la table d’inscription.

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 cet exemple de données :

    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 en tant que SampleSchema.xml.

  4. Enregistrez le code de mise à jour (SampleUpdategram) dans le même dossier utilisé pour enregistrer le schéma de mappage à l’étape précédente. (Ce code de mise à jour supprime un étudiant avec StudentID="1 » du 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.

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

  6. Enregistrez et exécutez le code de mise à jour suivant, comme décrit dans les étapes précédentes. Le code de mise à jour ajoute l’étudiant avec StudentID="1 » dans le cours CS102 en ajoutant un enregistrement dans la table Inscription.

    <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 code de mise à jour suivant, comme décrit dans les étapes précédentes. Ce code de mise à jour insère trois nouveaux étudiants et les inscrit dans le cours CS101. Là encore, la relation IDREFS insère des enregistrements dans la table Inscription.

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

Il s’agit du 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 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).

Voir aussi

Considérations relatives à la sécurité du code de mise à jour (SQLXML 4.0)