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:
The modify() Method (xml Data Type) is used to specify the delete XML DML keyword.
The query() Method (xml Data Type) is used to query the document.
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