Udostępnij za pośrednictwem


Usuń (XML DML)

Usuwa węzłów XML wystąpienie.

Składnia

delete Expression

Argumenty

  • Expression
    XQuerywyrażenie identyfikuje węzłów, które mają zostać usunięte. Zostaną usunięte wszystkie węzły zaznaczone przez wyrażeniei również wszystkie węzły lub wartości, które są zawarte w wybranych węzłów.Zgodnie z opisem w Wstaw XML ( DML), musi to być odwołanie do istniejącego węzła w dokumencie.Nie może być konstruowana węzła.wyrażenie nie może być węzeł główny (/).Jeśli wyrażenie zwróci wartość pustej sekwencji, nie usuwania i są zwracane żadne błędy.

Przykłady

A.Usuwanie węzłów z dokumentu przechowywanego w zmiennej bez typu xml

Poniższy przykład ilustruje sposób usunąć różne węzły z dokumentu.Po pierwsze, XML wystąpienie jest przypisana do zmiennej xml typu.Następnie usuń kolejnych sprawozdań XML DML usunąć różne węzły z dokumentu.

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.Usuwanie węzłów z dokumentu przechowywanego w xml bez typu kolumna

W poniższym przykładzie usunąć XML DML instrukcja usuwa drugi element podrzędność <Features> z dokumentu przechowywane w kolumna.

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

Poniższe z poprzedniej kwerendy:

C.Usuwanie węzłów z wpisaną xml kolumna

W tym przykładzie usuwa węzły z instrukcjami wytwarzania dokumentu XML przechowywane w pisma xml kolumna.

W przykładzie, należy najpierw utworzyć tabela (T) z wpisaną xml kolumna w AdventureWorks2008R2 bazy danych.Następnie skopiuj wytwarzania instrukcje XML wystąpienie z instrukcjami kolumna ProductModel tabela do tabela t i usunąć jeden lub więcej węzłów z dokumentu.

use AdventureWorks2008R2;
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