Maison > Article > développement back-end > Explication détaillée de l'exemple de code pour les opérations SQL sur les champs XML (image)
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)<.>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='<book id="0001"> <title>C Program</title> <author>David</author> <price>21</price> </book>'
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('/book/title')Le résultat d'exécution est tel qu'indiqué dans la figure :
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('(/book/title)[1]', 'nvarchar(max)')Le résultat en cours d'exécution est tel qu'indiqué dans la figure :
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('(/book/@id)[1]', 'nvarchar(max)')Le résultat en cours d'exécution est tel qu'indiqué dans la figure :
<.>
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 0002set @xmlDoc='<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>'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('(/root/book[@id="0002"])')
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('replace value of (/root/book[@id=0001]/price/text())[1] with "100"') --得到id为0001的book节点 select @xmlDoc.query('(/root/book[@id="0001"])')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('delete /root/book[@id=0002]') select @xmlDoc
3、添加节点
很多时候,我们还需要向xml里面添加节点,这个时候我们一样需要使用modify方法。下面我们就向id为0001的book节点中添加一个ISBN节点,代码如下:
--添加节点
set @xmlDoc.modify('insert <isbn>78-596-134</isbn> before (/root/book[@id=0001]/price)[1]') select @xmlDoc.query('(/root/book[@id="0001"]/isbn)')
运行结果如图:
4、添加和删除属性
当你学会对节点的操作以后,你会发现,很多时候,我们需要对节点进行操作。这个时候我们依然使用modify方法,例如,向id为0001的book节点中添加一个date属性,用来存储出版时间。代码如下:
--添加属性
set @xmlDoc.modify('insert attribute date{"2008-11-27"} into (/root/book[@id=0001])[1]') select @xmlDoc.query('(/root/book[@id="0001"])')
运行结果如图:
如果你想同时向一个节点添加多个属性,你可以使用一个属性的集合来实现,属性的集合可以写成:(attribute date{"2008-11-27"}, attribute year{"2008"}),你还可以添加更多。这里就不再举例了。
5、删除属性
删除一个属性,例如删除id为0001 的book节点的id属性,我们可以使用如下代码:
--删除属性
set @xmlDoc.modify('delete root/book[@id="0001"]/@id') select @xmlDoc.query('(/root/book)[1]')
运行结果如图:
6、修改属性
修改属性值也是很常用的,例如把id为0001的book节点的id属性修改为0005,我们可以使用如下代码:
--修改属性
set @xmlDoc.modify('replace value of (root/book[@id="0001"]/@id)[1] with "0005"') select @xmlDoc.query('(/root/book)[1]')
运行结果如图:
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!