Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-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:
De modify()-methode (xml Data Type) wordt gebruikt om het delete-XML DML-sleutelwoord te specificeren.
De query()-methode (xml Data Type) wordt gebruikt om het document te bevragen.
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)