Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
Törli a csomópontokat egy XML példányból.
Szemantika
delete Expression
Arguments
Kifejezés
Egy XQuery kifejezés, amely azonosítja a törölendő csomópontokat. Az összes kifejezés által kiválasztott csomópont, valamint az összes csomópont vagy érték, amely a kiválasztott csomópontokban található, törlik. Ahogy az insert (XML DML) leírásában leírva, ennek egy meglévő csomópontra kell utalnia a dokumentumban. Nem lehet konstruált csomópont. Az kifejezés nem lehet a gyökér (/) csomópont. Ha az kifejezés üres sorozatot ad vissza, nem történik törlés, és nem jelenik meg hiba.
Példák
A. Csomópontok törlése egy dokumentumból, amely egy típus nélküli xml változóban tárolt
A következő példa szemlélteti, hogyan lehet különböző csomópontokat törölni egy dokumentumból. Először is, egy XML példányt rendelnek xml típusú változóhoz. Ezután a következő törlés XML DML utasítások különböző csomópontokat törlik a dokumentumból.
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. Csomópontok törlése egy dokumentumból, amely egy nem gépelt xml oszlopban tárolt
A következő példában egy delete XML DML utasítás eltávolítja a második gyermek elemet <Features> a dokumentumból, amely az oszlopban tárolt.
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
Jegyezze fel az előző lekérdezésben szereplő következőket:
A modify() metódus (xml Data Type) segítségével megadják a delete XML DML kulcsszót.
A query() Method (xml Data Type) segítségével lekérdezik a dokumentumot.
C. Csomópontok törlése egy típusozott xml oszlopból
Ez a példa törli a csomópontokat egy gyártási utasításokból származó XML dokumentumból, amely egy gépelt xml oszlopban tárolt.
A példában először létrehozol egy táblát (T) egy gépelt xml oszlopbal az AdventureWorks adatbázisban. Ezután egy gyártási utasítások XML példányát másolsz a ProductModel tábla Instructions oszlopából a T táblába, és törölsz egy vagy több csomópontot a dokumentumból.
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
Lásd még:
Típusos XML összehasonlítása a típus nélküli XML-lel
XML-adatpéldányok létrehozása
xml-adattípus-metódusok
XML-adatmódosítási nyelv (XML DML)