Aracılığıyla paylaş


silmek (XML DML)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Bir XML örneğinden düğümleri siler.

Sözdizimi

delete Expression  

Arguments

İfade
Silecek düğümleri tanımlayan bir XQuery ifadesidir. İfade tarafından seçilen tüm düğümler ve seçilen düğümler içinde bulunan tüm düğümler veya değerler silinir. Insert (XML DML) bölümünde açıklandığı gibi, bu belgedeki mevcut bir düğüme referans olmalıdır. Yapılanmış bir düğüm olamaz. İfade kök (/) düğümü olamaz. Eğer ifade boş bir dizi döndürürse, silme olmaz ve hata döner.

Örnekler

A. Tiplenmemiş bir xml değişkeninde saklanan bir belgeden düğümlerin silinmesi

Aşağıdaki örnek, bir belgeden çeşitli düğümlerin nasıl silineceğini göstermektedir. İlk olarak, bir XML örneği xml tipindeki değişkene atanır. Sonrasında, sonraki silme XML DML ifadeleri belgeden çeşitli düğümleri siler.

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. Tiplenmemiş bir xml sütununda saklanan bir belgeden düğümleri silme

Aşağıdaki örnekte, silme XML DML ifadesi, sütunda saklanan belgeden ikinci çocuk öğesini kaldırır <Features> .

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  

Önceki sorgudan aşağıdakilere dikkat edin:

C. Tiplenmiş bir xml sütunundan düğümlerin silinmesi

Bu örnek, tiplenmiş bir xml sütununda saklanan üretim talimatları XML belgesinden düğümleri siler.

Örnekte, önce AdventureWorks veritabanında bir xml sütunuyla bir tablo (T) oluşturuyorsunuz. Daha sonra ProductModel tablosunun Talimatlar sütunundan bir üretim talimatları XML örneğini tablo T'ye kopyalayıp belgeden bir veya daha fazla düğümü siliyorsunuz.

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 

Ayrıca Bkz.

Türlü XML'i Türsüz XML ile Karşılaştır
XML Verisi Örnekleri Oluşturmak
xml Veri Türü Yöntemleri
XML Veri Değiştirme Dili (XML DML)