Explication détaillée de l'exemple de code pour les opérations SQL sur les champs XML (image)

黄舟
Libérer: 2017-03-09 17:10:10
original
1418 Les gens l'ont consulté

T-SqlDonnées XML d'opération

Avant-propos

SQL Server 2005 a introduit un type de données natif appelé XML. Les utilisateurs peuvent créer des tableaux comportant une ou plusieurs colonnes de type XML en plus des colonnes relationnelles. De plus, les variables et les paramètres sont autorisés. Pour mieux prendre en charge les fonctionnalités du modèle XML telles que l'ordre des documents et les structures récursives, les valeurs XML sont stockées dans un format interne sous forme de grands objets binaires (BLOB).

Lorsque les utilisateurs stockent des données XML dans la base de données, ils peuvent utiliser la chaîne XML. SQL Server convertira automatiquement la chaîne en type XML et la stockera dans la base de données.

Comme SQL Server prend en charge les champs XML, les instructions T-SQL fournissent également un grand nombre de fonctions d'opération XML pour coordonner l'utilisation des champs XML dans SQL Server. Cet article explique principalement comment utiliser les instructions SQL pour faire fonctionner XML.

2. Définir les champs XML

Lors de la conception de la base de données, nous pouvons facilement définir un champ de type XML dans le concepteur de table. Il convient de noter que les champs XML ne peuvent pas être utilisés comme clés primaires ou clés d'index. De même, nous pouvons également utiliser des instructions SQL pour créer des tables de données à l'aide de champs XML. L'instruction suivante crée une table nommée "docs" avec une clé primaire entière "pk" et une colonne XML non typée "xCol" :

CREATE TABLE docs (pk INT PRIMARY KEY, xCol XML not null)
Copier après la connexion
<. 🎜>En plus d'être utilisés dans les tableaux, les types XML peuvent également apparaître dans les procédures stockées, les transactions, les fonctions, etc. Terminons la première étape de notre opération XML, en utilisant des instructions SQL pour définir un type de données XML et lui attribuer une valeur :


declare @xmlDoc xml;
set @xmlDoc=&#39;<book id="0001">
<title>C Program</title>
<author>David</author>
<price>21</price>
</book>&#39;
Copier après la connexion

3. Opération de requête

Après avoir défini un type de données XML, le plus couramment utilisé est l'opération de requête. Voyons comment utiliser les instructions SQL pour effectuer des opérations de requête.

Dans T-Sql, deux fonctions sont fournies pour interroger les données de type XML, à savoir query(xquery) et value(xquery, dataType). Parmi elles, query(xquery) récupère la requête avec les données de la balise. , tandis que value(xquery, dataType) obtient le contenu de la balise. Dans le prochain cours, nous utiliserons ces deux fonctions pour interroger.

1, utilisez query(xquery) pour interroger

Nous devons obtenir le titre du livre, utilisez query(xquery) pour interroger , l'instruction de requête est :

select @xmlDoc.query(&#39;/book/title&#39;)
Copier après la connexion
Le résultat d'exécution est tel qu'indiqué dans la figure :


Explication détaillée de lexemple de code pour les opérations SQL sur les champs XML (image)

2 , en utilisant la requête value (xquery, dataType)

obtient également le titre du livre À l'aide de la fonction value, vous devez spécifier deux paramètres, l'un est xquery et l'autre est le. type de données à obtenir. Regardez l'instruction de requête suivante :

select @xmlDoc.value(&#39;(/book/title)[1]&#39;, &#39;nvarchar(max)&#39;)
Copier après la connexion
Le résultat en cours d'exécution est tel qu'indiqué dans la figure :


Explication détaillée de lexemple de code pour les opérations SQL sur les champs XML (image)

3, valeur d'attribut de requête

Que vous utilisiez une requête ou une valeur, vous pouvez facilement obtenir une certaine valeur d'attribut d'un nœud. Par exemple, nous voulons vraiment obtenir l'identifiant du nœud du livre. . Nous utilisons la méthode value pour interroger ici. , l'instruction est :

select @xmlDoc.value(&#39;(/book/@id)[1]&#39;, &#39;nvarchar(max)&#39;)
Copier après la connexion
Le résultat en cours d'exécution est tel qu'indiqué dans la figure :


Explication détaillée de lexemple de code pour les opérations SQL sur les champs XML (image)<. 🎜>

4

, en utilisant la requête XPath xpath est une instruction de requête XML unifiée prise en charge par la plateforme .net. L'utilisation de XPath peut facilement obtenir le nœud souhaité sans utiliser l'instruction Where. Par exemple, nous avons ajouté un autre nœud à @xmlDoc et l'avons redéfini comme suit :

--obtenez le nœud de livre avec l'identifiant 0002
set @xmlDoc=&#39;<root>
<book id="0001">
<title>C# Program</title>
<author>Jerry</author>
<price>50</price>
</book>
<book id="0002">
<title>Java Program</title>
<author>Tom</author>
<price>49</price>
</book>
</root>&#39;
Copier après la connexion

L'instruction ci-dessus peut être exécutée indépendamment , il obtient le nœud avec l'identifiant 0002. Les résultats d'exécution sont les suivants :
select @xmlDoc.query(&#39;(/root/book[@id="0002"])&#39;)
Copier après la connexion


Explication détaillée de lexemple de code pour les opérations SQL sur les champs XML (image)[6]

4. Opérations de modification

Les opérations de modification SQL incluent la mise à jour et la suppression. SQL fournit la méthode modifier() pour modifier XML. Le paramètre de la méthode modifier est le langage de modification XML. Le langage de modification XML est similaire à Insert, Delete et UpDate de SQL, mais ce n'est pas le même.

1

, modifiez la valeur du nœud Nous voulons modifier le prix du livre avec l'identifiant 0001 à 100, nous pouvons utiliser la méthode de modification . Le code est le suivant :

Remarque : la méthode de modification doit apparaître après la définition. Le résultat de l'exécution est tel qu'indiqué dans la figure :
set @xmlDoc.modify(&#39;replace value of (/root/book[@id=0001]/price/text())[1] with "100"&#39;)
--得到id为0001的book节点
select @xmlDoc.query(&#39;(/root/book[@id="0001"])&#39;)
Copier après la connexion

Explication détaillée de lexemple de code pour les opérations SQL sur les champs XML (image)

2

, supprimez le nœud Ensuite, nous supprimons le nœud id 0002, le code est le suivant :

Le résultat de l'exécution est tel qu'indiqué dans la figure :
--删除节点id为0002的book节点
set @xmlDoc.modify(&#39;delete /root/book[@id=0002]&#39;)
select @xmlDoc
Copier après la connexion

Explication détaillée de lexemple de code pour les opérations SQL sur les champs XML (image)

3、添加节点

很多时候,我们还需要向xml里面添加节点,这个时候我们一样需要使用modify方法。下面我们就向id为0001的book节点中添加一个ISBN节点,代码如下:

--添加节点

set @xmlDoc.modify(&#39;insert <isbn>78-596-134</isbn> before (/root/book[@id=0001]/price)[1]&#39;)
select @xmlDoc.query(&#39;(/root/book[@id="0001"]/isbn)&#39;)
Copier après la connexion

运行结果如图:

Explication détaillée de lexemple de code pour les opérations SQL sur les champs XML (image)

4、添加和删除属性

当你学会对节点的操作以后,你会发现,很多时候,我们需要对节点进行操作。这个时候我们依然使用modify方法,例如,向id为0001的book节点中添加一个date属性,用来存储出版时间。代码如下:

--添加属性

set @xmlDoc.modify(&#39;insert attribute date{"2008-11-27"} into (/root/book[@id=0001])[1]&#39;)
select @xmlDoc.query(&#39;(/root/book[@id="0001"])&#39;)
Copier après la connexion

运行结果如图:

Explication détaillée de lexemple de code pour les opérations SQL sur les champs XML (image)

如果你想同时向一个节点添加多个属性,你可以使用一个属性的集合来实现,属性的集合可以写成:(attribute date{"2008-11-27"}, attribute year{"2008"}),你还可以添加更多。这里就不再举例了。

5、删除属性

删除一个属性,例如删除id为0001 的book节点的id属性,我们可以使用如下代码:

--删除属性

set @xmlDoc.modify(&#39;delete root/book[@id="0001"]/@id&#39;)
select @xmlDoc.query(&#39;(/root/book)[1]&#39;)
Copier après la connexion

运行结果如图:

Explication détaillée de lexemple de code pour les opérations SQL sur les champs XML (image)

6、修改属性

修改属性值也是很常用的,例如把id为0001的book节点的id属性修改为0005,我们可以使用如下代码:

--修改属性

set @xmlDoc.modify(&#39;replace value of (root/book[@id="0001"]/@id)[1] with "0005"&#39;)
select @xmlDoc.query(&#39;(/root/book)[1]&#39;)
Copier après la connexion

运行结果如图:

Explication détaillée de lexemple de code pour les opérations SQL sur les champs XML (image)

OK,经过上面的学习,相信你已经可以很好的在SQL中使用Xml类型了,下面是我们没有提到的,你可以去其它地方查阅:exist()方法,用来判断指定的节点是否存在,返回值为true或false; nodes()方法,用来把一组由一个查询返回的节点转换成一个类似于结果集的表中的一组记录行。

 


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal