Sdílet prostřednictvím


odstranit (XML DML)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Maže uzly z XML instance.

Syntaxe

delete Expression  

Arguments

Výraz
Je XQuery výraz identifikující uzly, které mají být smazány. Všechny uzly vybrané výrazem, stejně jako všechny uzly nebo hodnoty obsažené ve vybraných uzlech, jsou smazány. Jak je popsáno v insertu (XML DML), musí se jednat o odkaz na existující uzel v dokumentu. Nemůže to být konstruovaný uzel. Výraz nemůže být kořenovým uzlem (/). Pokud výraz vrátí prázdnou sekvenci, nedochází ke smazání a chyby se nevrátí.

Examples

A. Mazání uzlů z dokumentu uloženého v netypované xml proměnné

Následující příklad ukazuje, jak smazat různé uzly z dokumentu. Nejprve je XML instance přiřazena proměnné typu xml . Následně příkazy delete XML DML odstraní různé uzly z dokumentu.

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. Mazání uzlů z dokumentu uloženého v netypovaném sloupci xml

V následujícím příkladu příkaz delete XML DML odstraní druhý podprvek z <Features> dokumentu uloženého ve sloupci.

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  

Všimněte si následujících věcí z předchozího dotazu:

C. Mazání uzlů z typovaného sloupce XML

Tento příklad maže uzly z XML dokumentu výrobních instrukcí uložených ve sloupci napsaném xml .

V příkladu nejprve vytvoříte tabulku (T) s napsaným sloupcem xml v databázi AdventureWorks. Poté zkopírujete XML instanci výrobních instrukcí ze sloupce Instrukce v tabulce ProductModel do tabulky T a smažete jeden nebo více uzlů z dokumentu.

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 

Viz také

Porovnání typovaného XML s nezatypovaným XML
Vytvoření instancí dat XML
metody datového typu XML
Jazyk pro úpravu dat XML (XML DML)