Aracılığıyla paylaş


(XML DML) değerini değiştir

Güncelleştirmeleri değerinin bir düğüm.

replace value of 
      Expression1 
with
      Expression2

Bağımsız değişkenler

  • Expression1
    Düğüm değerini güncelleştirileceğini tanımlar.Bu, yalnızca tek bir düğüm tanımlamanız gerekir.Başka bir deyişle,Expression1olmalıdır statical bir tek.XML yazdıysanız, düğüm türü basit tür olması gerekir.Birden fazla düğümü seçiliyse, hata oluşur.If Expression1 returns an empty sequence, no value replacement occurs and no errors are returned.Expression1 must return a single element that has simply typed content (list or atomic types), a text node, or an attribute node.Expression1 cannot be a union type, a complex type, a processing instruction, a document node, or a comment node.Öyleyse, bir hata döndürülür.

  • Expression2
    Düğümü yeni değerini belirtir.Bu, verir, sadece yazılı bir düğüm için bir ifade olabilirData() dolaylı olarak kullanılacak.Değer bir değerler listesi isegüncelleştirme deyim eski değeri listesi. ile değiştirir Yer değiştirme yazılan bir XML örnekExpression2aynı tür veya alt türü olan olmalıdırExpression1.Aksi takdirde hata oluşur.Türlenmemiş bir XML örnek değiştirmekExpression2atomized bir ifade olmalıdır.Aksi takdirde hata oluşur.

Örnekler

Aşağıdaki örneklerideğeri değiştirmeBir XML belgesinin düğümleri nasıl XML DML deyimini gösterir.

C.Bir XML örnek değerleri değiştirme

Aşağıdaki örnekte, bir belgenin örnek önce atanmış bir değişken içinXML type.Daha sonradeğeri değiştirmeXML DML deyimlerini. değerleri Güncelleştir

DECLARE @myDoc xml
SET @myDoc = '<Root>
<Location LocationID="10" 
            LaborHours="1.1"
            MachineHours=".2" >Manufacturing steps are described here.
<step>Manufacturing step 1 at this work center</step>
<step>Manufacturing step 2 at this work center</step>
</Location>
</Root>'
SELECT @myDoc

-- update text in the first manufacturing step
SET @myDoc.modify('
  replace value of (/Root/Location/step[1]/text())[1]
  with     "new text describing the manu step"
')
SELECT @myDoc
-- update attribute value
SET @myDoc.modify('
  replace value of (/Root/Location/@LaborHours)[1]
  with     "100.0"
')
SELECT @myDoc

Güncelleştirilen hedefi, en fazla yol açıkça belirtilen bir düğüm olması gerektiğini unutmayın ifade sonunda "[1]" ekleyerek ifade.

B.Kullanarak if ifadesi yerine değerini belirlemek için

Belirtebileceğinizif İfade2 ifade ifadesinin gösterildiği gibi aşağıdaki örnekte. XML DML değerinin yerine , İfade1 tanımlayan LaborHours öznitelik ilk iş güncelleştirilecek merkezidir.İfade2 kullanan birif ifade LaborHours özniteliği. yeni değerini belirlemek için

DECLARE @myDoc xml
SET @myDoc = '<Root>
<Location LocationID="10" 
            LaborHours=".1"
            MachineHours=".2" >Manu steps are described here.
<step>Manufacturing step 1 at this work center</step>
<step>Manufacturing step 2 at this work center</step>
</Location>
</Root>'
--SELECT @myDoc

SET @myDoc.modify('
  replace value of (/Root/Location[1]/@LaborHours)[1]
  with (
       if (count(/Root/Location[1]/step) > 3) then
         "3.0"
       else
          "1.0"
      )
')
SELECT @myDoc

C.Türlenmemiş bir XML biçiminde depolanan XML güncelleştirme sütun

Aşağıdaki örnek, depolanan XML güncelleştirmeleri bir sütun:

drop table T
go
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 current <ProductDescription> element
SELECT x.query(' /Root/ProductDescription')
FROM T
-- update the ProductName attribute value
UPDATE T
SET x.modify('
  replace value of (/Root/ProductDescription/@ProductName)[1]
  with "New Road Bike" ')
-- verify the update
SELECT x.query(' /Root/ProductDescription')
FROM T

D.Yazılan bir XML biçiminde depolanan XML güncelleştirme sütun

Bu örnekte üretim yönergeleri değerleri yerine yazılan bir XML olarak saklanan belgeyi sütun.

Örnekte, önce bir tablo (T) AdventureWorks veritabanındaki yazılan bir XML sütun oluşturun.Sonra bir üretim kopyaladığınız yönergeleri XML örneği ProductModel yönergeleri sütununun tablo içine tablo T.Eklemeler sonra tablo t XML uygulanır

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
--insert a new location - <Location 1000/>. 
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"  LotSize="1000" >
           <MI:step>Do something using <MI:tool>hammer</MI:tool></MI:step>
         </MI:Location>
  as first
  into   (/MI:root)[1]
')
go
select Instructions
from T
go
-- Now replace manu. tool in location 1000
update T
set Instructions.modify('
  declare namespace MI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
  replace value of (/MI:root/MI:Location/MI:step/MI:tool)[1] 
  with   "screwdriver"
')
go
select Instructions
from T
-- Now replace value of lot size
update T
set Instructions.modify('
  declare namespace MI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
  replace value of (/MI:root/MI:Location/@LotSize)[1] 
  with   500 cast as xs:decimal ?
')
go
select Instructions
from T

Not kullanımıatama değiştirirken LotSize değeri.Değerin belirli bir türde olması gerekir, bu gereklidir.Bu örnekte, açık çevrim, değer 500, gerekli olmaz.