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 code 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. À l’inverse, en cas d’opération de suppression, le <bloc après> peut être omis.
Si vous utilisez un code 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 <avant> et< après> des paires.
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 s’il é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 code 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 code 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 l’ordre] »).
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 codes de mise à jour n’autorisent pas le passage de données de type d’image en tant que paramètres pendant les mises à jour.
Les types blob (binary large object) tels que le texte/ntext et les images ne doivent pas être utilisés dans le bloc avant> lors de l’utilisation des codes de mise à jour, car cela les inclut 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 BLOB. Par exemple, le mot clé LIKE est utilisé dans la clause WHERE pour comparer les colonnes du type de données texte . Toutefois, les comparaisons échouent dans le cas de types BLOB où la taille des données est supérieure à 8 Ko.
Les caractères spéciaux dans les données ntext peuvent entraîner des problèmes avec SQLXML 4.0 en raison des limitations de comparaison pour les types BLOB. Par exemple, l’utilisation de « [Serializable] » dans le bloc avant> d’un code de mise à jour lorsqu’elle est utilisée dans la< vérification de la concurrence 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)