Mise en forme XML côté client (SQLXML 4.0)
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance
Cette rubrique fournit des informations sur la mise en forme XML côté client. La mise en forme côté client fait référence à la mise en forme du code XML dans la couche intermédiaire.
Remarque
Cette rubrique fournit des informations supplémentaires sur l'utilisation de la clause FOR XML côté client ; elle suppose que la clause FOR XML vous est déjà familière. Pour plus d’informations sur FOR XML, consultez Construction de XML à l’aide de FOR XML.
SQLNCLI11 était la première version du fournisseur SQL Server pour comprendre pleinement les types de données introduits dans SQL Server 2005 (9.x). Le comportement de FOR XML côté client avec le fournisseur SQLOLEDB traite les types de données xml en tant que chaînes.
Important
SQL Server Native Client (SNAC) n’est pas fourni avec :
- 2022 - SQL Server 16 (16.x) et versions ultérieures
- SQL Server Management Studio 19 et versions ultérieures
SQL Server Native Client (SQLNCLI ou SQLNCLI11) et le fournisseur Microsoft OLE DB hérité pour SQL Server (SQLOLEDB) ne sont pas recommandés pour le nouveau développement d’applications.
Pour les nouveaux projets, utilisez l'un des pilotes suivants :
Pour SQLNCLI qui est fourni en tant que composant du moteur de base de données SQL Server (versions 2012 à 2019), consultez cette exception du cycle de vie du support.
Mise en forme de documents XML côté client
Lorsqu'une application cliente exécute la requête suivante :
SELECT FirstName, LastName
FROM Person.Contact
FOR XML RAW
...seule cette partie de la requête est envoyée au serveur :
SELECT FirstName, LastName
FROM Person.Contact
Le serveur exécute la requête et retourne un ensemble de lignes (qui contient FirstName et LastNamecolumns) au client. La couche intermédiaire applique ensuite la transformation FOR XML à l'ensemble de lignes et retourne la mise en forme XML au client.
De la même façon, lorsque vous exécutez une requête XPath, le serveur retourne l'ensemble de lignes au client et la transformation FOR XML EXPLICIT est appliquée à l'ensemble de lignes sur le client, ce qui génère la mise en forme XML souhaitée.
Le tableau suivant montre les modes que vous pouvez spécifier avec FOR XML côté client.
Mode FOR XML côté client | Commentaire |
---|---|
RAW | Produit des résultats identiques lors de la spécification de FOR XML côté client ou côté serveur. |
NESTED | Est semblable au mode FOR XML AUTO côté serveur. |
EXPLICIT | Est semblable au mode FOR XML EXPLICIT côté serveur. |
Remarque
Si vous spécifiez le mode AUTO et si vous demandez une mise en forme XML côté client, la requête entière est envoyée au serveur ; en d'autres termes, la mise en forme XML s'effectue sur le serveur. Cela répond à une question de commodité. Toutefois, notez que le mode NESTED retourne les noms de tables de base en tant que noms d'éléments dans le document XML généré. Certaines des applications que vous écrivez peuvent nécessiter des noms de tables de base. Par exemple, vous pouvez exécuter une procédure stockée et charger les données résultantes dans un jeu de données (dans Microsoft .NET Framework), puis générer ultérieurement un DiffGram pour mettre à jour les données dans les tables. Dans ce cas, vous avez besoin des informations sur les tables de base et vous devez utiliser le mode NESTED.
Avantages de la mise en forme XML côté client
Vous trouverez ci-après la description de certains avantages liés à la mise en forme XML sur le client.
Si vous avez des procédures stockées sur le serveur qui retournent un ensemble de lignes unique, vous pouvez demander une transformation FOR XML côté client pour générer du code XML.
Prenons l'exemple de la procédure stockée ci-dessous. Cette procédure retourne les noms et prénoms des employés à partir de la table Person.Contact de la base de données AdventureWorks :
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'GetContacts' AND type = 'P')
DROP PROCEDURE GetContacts
GO
CREATE PROCEDURE GetContacts
AS
SELECT FirstName, LastName
FROM Person.Contact
L'exemple de modèle XML suivant exécute la procédure stockée. La clause FOR XML est spécifiée après le nom de la procédure stockée.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:query client-side-xml="1">
EXEC GetContacts FOR XML NESTED
</sql:query>
</ROOT>
Étant donné que l’attribut xml côté client est défini sur 1 (true) dans le modèle, la procédure stockée est exécutée sur le serveur et l’ensemble de lignes à deux colonnes retourné par le serveur est transformé en XML au niveau intermédiaire et retourné au client. (Seul un résultat partiel est montré ici.)
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Person.Contact FirstName="Gustavo" LastName="Achong" />
<Person.Contact FirstName="Catherine" LastName="Abel" />
</ROOT>
Remarque
Lorsque vous utilisez le fournisseur SQLXMLOLEDB ou les classes managées SQLXML, vous pouvez utiliser la propriété ClientSideXml pour demander la mise en forme XML côté client.
La charge de travail est plus équilibrée.
Dans la mesure où le client effectue la mise en forme XML, la charge de travail est équilibrée entre le serveur et le client, ce qui permet au serveur d'exécuter d'autres tâches.
Prise en charge de la mise en forme XML côté client
Pour permettre la prise en charge des fonctionnalités de mise en forme XML côté client, SQLXML offre les éléments suivants :
fournisseur SQLXMLOLEDB
classes managées SQLXML
prise en charge améliorée du modèle XML.
Propriété SqlXmlCommand.ClientSideXml
Vous pouvez spécifier la mise en forme côté client en définissant cette propriété des classes managées SQLXML à true.
Prise en charge améliorée du modèle XML.
À compter de SQL Server 2005 (9.x), le modèle XML dans SQL Server a été amélioré avec l’ajout de l’attribut xml côté client. Si cet attribut a la valeur true, le code XML est mis en forme sur le client. Notez que cet attribut de modèle est identique à la fonctionnalité de la propriété ClientSideXMLXML spécifique au fournisseur SQLXMLOLEDB.
Remarque
Si vous exécutez un modèle XML dans une application ADO qui utilise le fournisseur SQLXMLOLEDB et que vous spécifiez à la fois l’attribut xml côté client dans le modèle et la propriété ClientSideXML du fournisseur, la valeur spécifiée dans le modèle est prioritaire.
Voir aussi
Architecture de la mise en forme XML côté client et côté serveur (SQLXML 4.0)
FOR XML (SQL Server)
Considérations relatives à la sécurité de FOR XML (SQLXML 4.0)
Prise en charge du type de données XML dans SQLXML 4.0
Classes managées SQLXML
Mise en forme XML côté client et côté serveur (SQLXML 4.0)
SqlXmlCommand, objet (classes managées SQLXML)
Données XML (SQL Server)