Extraction de données non consommées à l'aide de sql:overflow-field (schéma XDR)
Important
Cette rubrique est fournie à titre de référence pour les applications héritées. Cette fonctionnalité ne fera plus l'objet d'aucun travail de développement. Évitez de l'utiliser dans vos nouveaux travaux de développement. Utilisez à la place des schémas XSD annotés pour créer des vues XML. Pour plus d'informations, consultez Introduction aux schémas XSD annotés (SQLXML 4.0). Vous pouvez convertir des schémas XDR annotés existants en schémas XSD. Pour plus d'informations, consultez Conversion de schémas XDR annotés en schémas XSD équivalents (SQLXML 4.0).
Lorsque des enregistrements sont insérés dans la base de données à partir d'un document XML à l'aide d'OPENXML, toutes les données non consommées du document XML source peuvent être stockées dans une colonne. Lors de la récupération des données à partir de la base de données à l'aide des schémas annotés, l'attribut sql:overflow-field peut être spécifié pour identifier la colonne dans la table où les données de dépassement sont stockées.
Ces données sont alors récupérées selon les méthodes suivantes :
Les attributs stockés dans la colonne de dépassement sont ajoutés à l'élément qui contient l'annotation sql:overflow-field.
Les sous-éléments et leurs descendants, stockés dans la colonne de dépassement dans la base de données, sont ajoutés comme sous-éléments à la suite du contenu spécifié explicitement dans le schéma (aucun ordre n'est conservé).
Exemples
Pour créer des exemples fonctionnels à l'aide des exemples suivants, vous devez respecter certaines conditions requises. Pour plus d'informations, consultez Configuration requise pour l'exécution des exemples SQLXML.
A. Spécifier sql:overflow-field pour un <ElementType> dans le schéma XDR
L'exemple suppose que cette table existe dans la base de données tempdb :
USE tempdb
CREATE TABLE Customers2 (
CustomerID VARCHAR(10),
ContactName VARCHAR(30),
AddressOverflow NVARCHAR(500))
GO
INSERT INTO Customers2 VALUES (
'ALFKI',
'Joe',
'<Address>
<Address1>Maple St.</Address1>
<Address2>Apt. E105</Address2>
<City>Seattle</City>
<State>WA</State>
<Zip>98147</Zip>
</Address>')
GO
Dans cet exemple, le schéma de mappage récupère les données non consommées stockées dans la colonne AddressOverflow de la table Customers2. L'attribut sql:overflow-field est spécifié sur <ElementType>.
<?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="Customers2" sql:overflow-field="AddressOverflow" >
<AttributeType name="CustomerID" />
<AttributeType name="ContactName" />
<attribute type="CustomerID" />
<attribute type="ContactName"/>
</ElementType>
</Schema>
Test d'un exemple de requête XPath sur le schéma
Copiez le code de schéma ci-dessus et collez-le dans un fichier texte. Enregistrez ce fichier sous le nom OverflowXdr.xml.
Copiez le modèle suivant et collez-le dans un fichier texte. Enregistrez ce fichier sous le nom OverflowXdrT.xml dans le répertoire où vous avez enregistré OverflowXdr.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="OverflowXdr.xml"> Customers2 </sql:xpath-query> </ROOT>Le chemin d'accès au répertoire spécifié pour le schéma de mappage (OverflowXdr.xml) est relatif au répertoire dans lequel le modèle est enregistré. Vous pouvez également spécifier un chemin d'accès absolu, par exemple :
mapping-schema="C:\MyDir\OverflowXdr.xml"Créez et utilisez le script de test SQLXML 4.0 (Sqlxml4test.vbs) pour exécuter le modèle.
Pour plus d'informations, consultez Utilisation d'ADO pour exécuter des requêtes SQLXML 4.0.
Le jeu de résultats suivant est obtenu :
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Customers2 CustomerID="ALFKI" ContactName="Joe">
<Address1>Maple St.</Address1>
<Address2>Apt. E105</Address2>
<City>Seattle</City>
<State>WA</State>
<Zip>98147</Zip>
</Customers2>
</ROOT>