delete (DML XML)

Supprime des nœuds d'une instance XML.

Syntaxe

delete Expression

Arguments

  • Expression
    Expression XQuery qui identifie les nœuds à supprimer. Tous les nœuds sélectionnés par l'expression, ainsi que la totalité des nœuds ou des valeurs contenus dans les nœuds sélectionnés, sont supprimés. Comme l'indique la rubrique insert (DML XML), il doit s'agir d'une référence à un nœud existant dans le document. Ce ne peut pas être un nœud construit. L'expression ne peut pas être le nœud racine (/). Si l'expression renvoie une séquence vide, aucune suppression ne se produit et aucune erreur n'est renvoyée.

Exemples

A. Suppression de nœuds d'un document stocké dans une variable xml non typée

L'exemple suivant montre comment supprimer différents nœuds d'un document. D'abord, une instance XML est affectée à une variable de type xml. Ensuite, les instructions DML XML delete suivantes suppriment différents nœuds du document.

DECLARE @myDoc xml
SET @myDoc = '<?Instructions for=TheWC.exe ?> 
<Root>
 <!-- instructions for the 1st work center -->
<Location LocationID="10" 
            LaborHours="1.1"
            MachineHours=".2" >Some text 1
<step>Manufacturing step 1 at this work center</step>
<step>Manufacturing step 2 at this work center</step>
</Location>
</Root>'
SELECT @myDoc

-- delete an attribute
SET @myDoc.modify('
  delete /Root/Location/@MachineHours
')
SELECT @myDoc

-- delete an element
SET @myDoc.modify('
  delete /Root/Location/step[2]
')
SELECT @myDoc

-- delete text node (in <Location>
SET @myDoc.modify('
  delete /Root/Location/text()
')
SELECT @myDoc

-- delete all processing instructions
SET @myDoc.modify('
  delete //processing-instruction()
')
SELECT @myDoc

B. Suppression de nœuds d'un document stocké dans une colonne xml non typée

Dans l'exemple suivant, une instruction DML XML delete supprime le second élément enfant de <Features> du document stocké dans la colonne.

CREATE TABLE T (i int, x xml)
go
INSERT INTO T VALUES(1,'<Root>
<ProductDescription ProductID="1" ProductName="Road Bike">
<Features>
  <Warranty>1 year parts and labor</Warranty>
  <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>
</Features>
</ProductDescription>
</Root>')
go
-- verify the contents before delete
SELECT x.query(' //ProductDescription/Features')
FROM T
-- delete the second feature
UPDATE T
SET x.modify('delete /Root/ProductDescription/Features/*[2]')
-- verify the deletion
SELECT x.query(' //ProductDescription/Features')
FROM T

Notez les points suivants par rapport à la requête ci-dessus :

C. Suppression de nœuds d'une colonne xml typée

Cet exemple supprime des nœuds d'un document XML d'instructions de fabrication stocké dans une colonne xml typée.

Dans l'exemple, vous créez d'abord une table (T) dotée d'une colonne xml typée dans la base de données AdventureWorks. Ensuite, vous copiez une instance XML des instructions de fabrication depuis la colonne Instructions de la table ProductModel vers la table T et supprimez un ou plusieurs nœuds du document.

use AdventureWorks
go
drop table T
go
create table T(ProductModelID int primary key, 
Instructions xml (Production.ManuInstructionsSchemaCollection))
go
insert  T 
select ProductModelID, Instructions
from Production.ProductModel
where ProductModelID=7
go
select Instructions
from T
--1) insert <Location 1000/>. Note: <Root> must be singleton in the query
update T
set Instructions.modify('
  declare namespace MI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
  insert <MI:Location LocationID="1000"  LaborHours="1000" >
           These are manu steps at location 1000. 
           <MI:step>New step1 instructions</MI:step>
           Instructions for step 2 are here
           <MI:step>New step 2 instructions</MI:step>
         </MI:Location>
  as first
  into   (/MI:root)[1]
')
go
select Instructions
from T

-- delete an attribute
update T
set Instructions.modify('
  declare namespace MI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
  delete(/MI:root/MI:Location[@LocationID=1000]/@LaborHours) 
')
go
select Instructions
from T
-- delete text in <location>
update T
set Instructions.modify('
  declare namespace MI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
  delete(/MI:root/MI:Location[@LocationID=1000]/text()) 
')
go
select Instructions
from T
-- delete 2nd manu step at location 1000
update T
set Instructions.modify('
  declare namespace MI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
  delete(/MI:root/MI:Location[@LocationID=1000]/MI:step[2]) 
')
go
select Instructions
from T
-- cleanup
drop table T
go

Voir aussi

Concepts

XML typé et non typé
Type de données xml
Génération d'instances XML
Langage de modification de données XML (XML DML)
Exemples d'applications XML

Autres ressources

Méthodes des types de données xml

Aide et Informations

Assistance sur SQL Server 2005