Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Tar bort noder från en XML-instans.
Syntax
delete Expression
Arguments
Uttryck
Är ett XQuery-uttryck som identifierar noderna som ska tas bort. Alla noder som valts av uttrycket, samt alla noder eller värden som finns inom de valda noderna, raderas. Som beskrivs i insert (XML DML) måste detta vara en referens till en befintlig nod i dokumentet. Det kan inte vara en konstruerad nod. Uttrycket kan inte vara rotnoden (/). Om uttrycket returnerar en tom sekvens sker ingen radering och inga fel returneras.
Examples
A. Att ta bort noder från ett dokument som lagrats i en otypad xml-variabel
Följande exempel illustrerar hur man tar bort olika noder från ett dokument. Först tilldelas en XML-instans en variabel av xml-typ . Därefter raderar efterföljande delete-XML DML-satser olika noder från dokumentet.
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. Att radera noder från ett dokument som lagras i en otypad xml-kolumn
I följande exempel tar en delete XML DML-sats bort det andra barnelementet i <Features> från dokumentet som lagras i kolumnen.
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
Observera följande från föregående fråga:
Metoden modify() (xml Data Type) används för att specificera nyckelordet delete XML DML.
Query()-metoden (xml Data Type) används för att fråga dokumentet.
C. Radering av noder från en typad xml-kolumn
Detta exempel tar bort noder från ett XML-dokument för tillverkningsinstruktioner som lagras i en typad xml-kolumn .
I exemplet skapar du först en tabell (T) med en typad xml-kolumn i AdventureWorks-databasen. Du kopierar sedan en tillverkningsinstruktions-XML-instans från kolumnen Instruktioner i ProductModel-tabellen till tabell T och tar bort en eller flera noder från dokumentet.
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
Se även
Jämför typad XML med otypad XML
Skapa instanser av XML-data
xml-datatypsmetoder
XML-datamodifieringsspråk (XML DML)