Aracılığıyla paylaş


delete (XML DML)

Düğümlerden siler bir XML örnek.

delete Expression

Bağımsız değişkenler

  • Expression
    XQuery ifade silinecek düğümleri tanımlayan iş.Seçili tüm düğümleri ifade, ve ayrıca tüm düğümleri veya içinde seçilen düğümleri, içerdiği değerler silinir.Olarak açıklanan(XML DML) ekleme. Varolan bir düğüme bir başvuru bu olmalıdır Bu, oluşturulan bir düğüm olamaz.ifade (/) Kök düğümü olamaz.İfade boş bir sıra döndürürse, hiçbir silme oluşur ve herhangi bir hata döndürülür.

Örnekler

C.Depolanmış bir değişkeni türlenmemiş bir xml belgesindeki düğümlere silme

Aşağıdaki örnekte çeşitli düğüm bir belgeden sildiğiniz verilmektedir.İlk olarak, bir XML örnek atandığı için değişkenXML type.Daha sonra sonraki silme XML DML deyimlerini çeşitli düğüm belgeden silin.

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.Türlenmemiş bir xml saklanan bir belgeden düğümler silme sütun

In the following example, a delete XML DML statement removes the second child element of <Features> from the document stored in the column.

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.Düğüm yazılan bir xml sütun silme

Düğümlerin bu örnek XML belgesi saklanan bir üretim yönergeleri siler bir yazılıXML sütun.

Örnekte, ilk oluşturduğunuz bir yazılı olan bir tablo (T)XML AdventureWorks veritabanını. sütun Ardından kopya bir üretim yönergeleri XML ProductModel tablodaki yönergeleri sütundan T tabloya örnek ve bir veya daha fazla düğüm belgeden silin.

use AdventureWorks
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
select 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