Share via


Règles et limitations des codes de mise à jour XML (SQLXML 4.0)

S’applique à :SQL ServerAzure SQL Database

Tenez compte des éléments suivants lorsque vous utilisez des codes de mise à jour (updategrams) XML :

  • Si vous utilisez un programme de mise à jour pour une opération d’insertion avec une seule paire de <blocs avant> et <après> , le <bloc avant> peut être omis. Inversement, en cas d’opération de suppression, le <bloc après> peut être omis.

  • Si vous utilisez un programme de mise à jour avec plusieurs <blocs avant> et <après> dans la <balise de synchronisation> , les <blocs avant> et <après> doivent être spécifiés pour former <des paires avant> et <après> .

  • Les mises à jour dans un code de mise à jour sont appliquées à la vue XML fournie avec le schéma XML. Par conséquent, pour que le mappage par défaut soit un succès, vous devez spécifier le nom du fichier de schéma dans le code de mise à jour ou, si le nom de fichier n'est pas fourni, les noms d'élément et d'attribut doivent correspondre aux noms de table et de colonne dans la base de données.

  • SQLXML 4.0 nécessite que toutes les valeurs de colonne dans un code de mise à jour soient explicitement mappées dans le schéma (XDR ou XSD) fourni pour composer la vue XML de ses éléments enfants. Ce comportement diffère des versions antérieures de SQLXML, qui autorisait une valeur pour une colonne non mappée dans le schéma si elle était implicite dans le cadre de la clé étrangère dans une annotation sql:relationship . Notez que ce changement n'affecte pas la propagation des valeurs de clé primaire dans les éléments enfants qui a toujours lieu dans SQLXML 4.0 si aucune valeur n'est explicitement spécifiée pour l'élément enfant.

  • Si vous utilisez un programme de mise à jour pour modifier des données dans une colonne binaire (par exemple, le type de données d’image SQL Server), vous devez fournir un schéma de mappage dans lequel le type de données SQL Server (par exemple, sql:datatype="image ») et le type de données XML (par exemple, dt:type="binhex » ou dt:type="binbase64) doivent être spécifiés. Les données de la colonne binaire doivent être spécifiées dans le code de mise à jour ; l’annotation sql:url-encode spécifiée dans le schéma de mappage est ignorée par le programme de mise à jour.

  • Lorsque vous écrivez un schéma XSD, si la valeur que vous spécifiez pour l’annotation sql:relation ou sql:field inclut un caractère spécial, tel qu’un caractère d’espace (par exemple, dans le nom de la table « Détails de l’ordre »), cette valeur doit être placée entre crochets (par exemple, « [Détails de la commande] »).

  • Lors de l'utilisation de codes de mise à jour, les relations de chaîne ne sont pas prises en charge. Par exemple, si les tables A et C sont liées par une relation de chaîne qui utilise la table B, l'erreur suivante survient lorsque vous tentez d'exécuter le code de mise à jour :

    There is an inconsistency in the schema provided.  
    

    Même si le schéma et le code de mise à jour à la fois apparaissent corrects et formés comme il se doit, cette erreur se produira s'il existe une relation de chaîne.

  • Les mises à jour n’autorisent pas la transmission de données de type image en tant que paramètres pendant les mises à jour.

  • Les types d’objets BLOB (Binary Large Object), tels que text/ntext et images, ne doivent pas être utilisés dans le bloc avant> lors de l’utilisation de mises à jour, car cela les inclura pour une utilisation dans le< contrôle d’accès concurrentiel. Cela peut entraîner des problèmes avec SQL Server en raison des limitations de comparaison pour les types d’objets BLOB. Par exemple, le mot clé LIKE est utilisé dans la clause WHERE pour la comparaison entre les colonnes du type de données texte ; toutefois, les comparaisons échouent dans le cas des types BLOB où la taille des données est supérieure à 8K.

  • Les caractères spéciaux dans les données ntext peuvent causer des problèmes avec SQLXML 4.0 en raison des limitations de la comparaison pour les types BLOB. Par exemple, l’utilisation de « [Serializable] » dans le <bloc avant> d’un programme de mise à jour lors de la vérification d’accès concurrentiel d’une colonne de type ntext échoue avec la description d’erreur SQLOLEDB suivante :

    Empty update, no updatable rows found   Transaction aborted  
    

Voir aussi

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