Delen via


verwijderen (XML DML)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Verwijdert nodes uit een XML-instantie.

Syntaxis

delete Expression  

Arguments

Uitdrukking
Is een XQuery-expressie die de te verwijderen knopen identificeert. Alle knooppunten die door de expressie zijn geselecteerd, evenals alle knooppunten of waarden die zich binnen de geselecteerde knooppunten bevinden, worden verwijderd. Zoals beschreven in insert (XML DML), moet dit een verwijzing zijn naar een bestaande node in het document. Het kan geen geconstrueerde knoop zijn. De expressie kan niet de wortelknoop (/) zijn. Als de expressie een lege reeks teruggeeft, vindt geen verwijdering plaats en worden er geen fouten teruggegeven.

Voorbeelden

Eén. Knopen verwijderen uit een document opgeslagen in een ongetypte xml-variabele

Het volgende voorbeeld illustreert hoe je verschillende knooppunten uit een document kunt verwijderen. Eerst wordt een XML-instantie toegewezen aan variabele van xml-type . Vervolgens verwijderen daaropvolgende XML DML-instructies verschillende knooppunten uit het 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. Knopen verwijderen uit een document die zijn opgeslagen in een niet-getypte xml-kolom

In het volgende voorbeeld verwijdert een delete XML DML-instructie het tweede kindelement van <Features> uit het document dat in de kolom is opgeslagen.

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  

Let op het volgende uit de vorige query:

C. Knopen verwijderen uit een getypte xml-kolom

Dit voorbeeld verwijdert knooppunten uit een XML-document met productie-instructies die zijn opgeslagen in een getypte xml-kolom .

In het voorbeeld maak je eerst een tabel (T) aan met een getypeerde xml-kolom in de AdventureWorks-database. Vervolgens kopieer je een XML-instantie van de Instructions-kolom in de ProductModel-tabel naar tabel T en verwijder je een of meer knooppunten uit het document.

USE AdventureWorks2022;
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  
SET 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 

Zie ook

Vergelijk getypte XML met niet-getypte XML
Exemplaren van XML-gegevens maken
xml-gegevenstypemethoden
Taal voor wijziging van XML-gegevens (XML DML)