Aracılığıyla paylaş


Ekle (XML DML)

Tanımlanan bir veya daha fazla düğüm ekler Expression1 alt düğümlerin ya da eşdüzey düğüm tarafından tanımlanan Expression2.

insert 
      Expression1 (
                 {as first | as last} into | after | before
                                    Expression2
                )

Bağımsız değişkenler

  • Expression1
    Bir veya daha fazla düğüm eklemek için tanımlar.Bunun olması sabit bir XML örnek; bir başvuru üzerinde değiştirme yöntem uygulanan; XML Şeması aynı koleksiyonun yazılan bir XML veri türü örnek için tek başına bir kullanarak bir türlenmemiş XML veri türü örnek sql:column()/sql:variable() işlev; veya XQuery ifade. Ifade bir düğüm aynı zamanda bir metin düğümü veya düğümlerin sıralı bir dizi sonuçlanabilir.Bu, kök (/) düğüme çözümlenemiyor.Ifade, bir değer ya da değerler dizisi sonuçlanırsa, değerler, sıradaki her değeri ayırmak için bir alan ile bir tek metin düğümü eklenir.Birden çok düğüm sabit olarak belirtirseniz, düğümlerin parantez içinde bulunan ve noktalı virgülle ayrılır.Öğeleri, öznitelikleri ve değerleri dizisi gibi heterojen serilerini eklenemiyor.If Expression1 boş bir sıra giderir, hiçbir ekleme oluşur ve bir hata döndürülür.

  • içine
    Düğümler tarafından tanımlanır. Expression1 doğrudan descendents (alt düğümlerin) tarafından tanımlanan düğüm eklenir Expression2. Varsa, düğümü Expression2 zaten bir veya daha fazla alt düğümleri vardır, ya da kullanmanız gerekir olarak ilk or olarak son eklenen yeni bir düğüm istediğiniz belirtmek için.Örneğin, başlangıç sırasında veya alt listenin sonundaki sırasıyla.The as first and as last keywords are ignored when attributes are inserted.

  • sonra
    Düğümler tarafından tanımlanır. Expression1 doğrudan eşi tanımlanan düğüm sonra eklenir Expression2. The after keyword cannot be used to insert attributes.Örneğin, bir öznitelik oluşturucu ekleyin ya da öznitelik bir XQuery dönmek için kullanılamaz.

  • önce
    Düğümler tarafından tanımlanır. Expression1 Eşdüzey doğrudan tarafından tanımlanan düğüm önce eklenir Expression2. The before keyword cannot be used when attributes are being inserted.Örneğin, bir öznitelik oluşturucu ekleyin ya da öznitelik bir XQuery dönmek için kullanılamaz.

  • Expression2
    Bir düğüm tanımlar.Tanımlanan düğüm Expression1 göreceli olarak tanımlanan bir düğüm eklenir Expression2. Bu, şu anda referansta bulunulan belge içinde var olan bir düğüm için bir başvuru veren XQuery ifade geçersiz olabilir.Birden fazla düğüm döndürülürse, ekleme başarısız.If Expression2 boş bir sıra, hiçbir ekleme oluşuyor verir ve herhangi bir hata döndürdü. If Expression2 is statically not a singleton, a static error is returned.Expression2 cannot be a processing instruction, comment, or attribute.Dikkat Expression2 Varolan bir belgeyi düğümünde ve oluşturulmuş bir düğüm için bir başvuru olmalıdır.

Örnekler

C.Öğe düğümleri belgeye ekleme

Aşağıdaki örnek, bir belgenin içine öğe eklemek verilmektedir.Ilk olarak, bir XML belgesi için bir değişken atanan XML türü.Sonra birkaç ekleme Nasıl öğe düğümleri, belgeye eklenmiş örnek XML DML deyimlerini göstermektedir.Sonra her ekleme, SELECT deyim sonucu görüntüler.

USE AdventureWorks;
GO
DECLARE @myDoc xml       
SET @myDoc = '<Root>       
    <ProductDescription ProductID="1" ProductName="Road Bike">       
        <Features>       
        </Features>       
    </ProductDescription>       
</Root>'       
SELECT @myDoc       
-- insert first feature child (no need to specify as first or as last)       
SET @myDoc.modify('       
insert <Maintenance>3 year parts and labor extended maintenance is available</Maintenance> 
into (/Root/ProductDescription/Features)[1]') 
SELECT @myDoc       
-- insert second feature. We want this to be the first in sequence so use 'as first'       
set @myDoc.modify('       
insert <Warranty>1 year parts and labor</Warranty>        
as first       
into (/Root/ProductDescription/Features)[1]       
')       
SELECT @myDoc       
-- insert third feature child. This one is the last child of <Features> so use 'as last'       
SELECT @myDoc       
SET @myDoc.modify('       
insert <Material>Aluminium</Material>        
as last       
into (/Root/ProductDescription/Features)[1]       
')       
SELECT @myDoc       
-- Add fourth feature - this time as a sibling (and not a child)       
-- 'after' keyword is used (instead of as first or as last child)       
SELECT @myDoc       
set @myDoc.modify('       
insert <BikeFrame>Strong long lasting</BikeFrame> 
after (/Root/ProductDescription/Features/Material)[1]       
')       
SELECT @myDoc;
GO

Bu örnekte tüm yol ifadelerinde, "[1]" belirtmek statik her yazım gereksinim olarak unutmayın.Bu, tek bir hedef düğüm sağlar.

b.Birden çok öğe belgeye ekleme

Aşağıdaki örnekte, belgenin atandığı bir değişken için xml yazın. Sonra iki öğe, ürün özellikleri gösteren bir dizi ikinci bir değişkene atanır. xml yazın. Bu sıralama, ardından ilk değişken eklenir.

USE AdventureWorks;
GO
DECLARE @myDoc xml;
SET @myDoc = N'<Root>           
<ProductDescription ProductID="1" ProductName="Road Bike">           
    <Features> </Features>           
</ProductDescription>           
</Root>';
DECLARE @newFeatures xml;
SET @newFeatures = N'<Warranty>1 year parts and labor</Warranty>          
<Maintenance>3 year parts and labor extended maintenance is available</Maintenance>';         
-- insert new features from specified variable          
SET @myDoc.modify('           
insert sql:variable("@newFeatures")           
into (/Root/ProductDescription/Features)[1] ')           
SELECT @myDoc;
GO

c.Öznitelikleri belgeye ekleme

Öznitelikleri bir document.First nasıl eklenir, aşağıdaki örnekte gösterilmektedir, belgenin atandığı bir XML türü değişkeni.Sonra bir dizi ekleme XML DML deyimlerini öznitelikleri belgeye eklemek için kullanılır.Her öznitelik ekleme sonra SELECT deyiminin sonuç görüntüler.

USE AdventureWorks;
GO
DECLARE @myDoc xml           
SET @myDoc = 
'<Root>           
    <Location LocationID="10" >           
        <step>Manufacturing step 1 at this work center</step>           
        <step>Manufacturing step 2 at this work center</step>           
    </Location>           
</Root>' 
SELECT @myDoc           
-- insert LaborHours attribute           
SET @myDoc.modify('           
insert attribute LaborHours {".5" }           
into (/Root/Location[@LocationID=10])[1] ')           
SELECT @myDoc           
-- insert MachineHours attribute but its value is retrived from a sql variable @Hrs           
DECLARE @Hrs float           
SET @Hrs =.2           
SET @myDoc.modify('           
insert attribute MachineHours {sql:variable("@Hrs") }           
into   (/Root/Location[@LocationID=10])[1] ')           
SELECT @myDoc           
-- insert sequence of attribute nodes (note the use of ',' and ()            
-- around the attributes.           
SET @myDoc.modify('           
insert (            
           attribute SetupHours {".5" },           
           attribute SomeOtherAtt {".2"}           
        )           
into (/Root/Location[@LocationID=10])[1] ')           
SELECT @myDoc;
GO

d.Bir açıklama düğümü ekleme

Bu sorgu, bir XML belgesi atandığı bir değişken için XML türü.Daha sonra XML DML sonra ilk düğüm açıklama eklemek için kullanılır <step> öğe.

USE AdventureWorks;
GO
DECLARE @myDoc xml           
SET @myDoc = 
'<Root>           
    <Location LocationID="10" >           
        <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('           
insert <!-- some comment -->           
after (/Root/Location[@LocationID=10]/step[1])[1] ')           
SELECT @myDoc;
GO

e.Bir işlem yönergesi ekleme

Aşağıdaki sorguda, bir XML belgesi ilk değişken için atanan XML türü.Daha sonra XML DML anahtar sözcüğü belgenin başlangıcında bir işlem yönergesi eklemek için kullanılır.

USE AdventureWorks;
GO
DECLARE @myDoc xml           
SET @myDoc = 
'<Root>           
    <Location LocationID="10" >           
        <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('           
insert <?Program="Instructions.exe" ?>           
before (/Root)[1] ')           
SELECT @myDoc ;
GO

f.Bir CDATA bölümü kullanarak veri ekleme

Gibi XML'DE geçerli olmayan karakterleri içeren metin eklediğinizde < veya >, aşağıdaki sorguda gösterilen verileri eklemek için CDATA bölümleri kullanabilirsiniz. Sorgu bir CDATA bölümü belirtir, ancak bu geçersiz karakterleri varlıklara dönüştürülmüş olan bir metin düğümü eklenir.Örneğin, '<' olarak kaydedildi &lt;.

USE AdventureWorks;
GO
DECLARE @myDoc xml           
SET @myDoc = 
'<Root>           
    <ProductDescription ProductID="1" ProductName="Road Bike">           
        <Features> </Features>           
    </ProductDescription>           
</Root>'           
SELECT @myDoc           
SET @myDoc.modify('           
insert <![CDATA[ <notxml> as text </notxml> or cdata ]]> 
into  (/Root/ProductDescription/Features)[1] ')  
SELECT @myDoc ;
GO

Sorgu bir metin düğümü içine ekler <Features> öğe:

<Root>
<ProductDescription ProductID="1" ProductName="Road Bike">
<Features> &lt;notxml&gt; as text &lt;/notxml&gt; or cdata </Features>
</ProductDescription>
</Root>     

g.Metin düğümü ekleme

Bu sorgu, bir XML belgesi atandığı bir değişken için XML türü.Sonra XML DML ilk alt olarak bir metin düğümü eklemek için kullanılan <Root> öğe. Metin kurucu metni belirlemek için kullanılır.

USE AdventureWorks;
GO
DECLARE @myDoc xml
SET @myDoc = '<Root>
<ProductDescription ProductID="1" ProductName="Road Bike">
<Features>

</Features>
</ProductDescription>
</Root>'
SELECT @myDoc
set @myDoc.modify('
 insert text{"Product Catalog Description"} 
 as first into (/Root)[1]
')
SELECT @myDoc

h.Yeni bir öğe türlenmemiş bir xml ekleme sütun

Aşağıdaki örnek XML DML, depolanan bir XML örneği güncelleştirmek için geçerli bir XML türü sütun:

USE AdventureWorks;
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
-- insert a new element
UPDATE T
SET x.modify('insert <Material>Aluminium</Material> as first
  into   (/Root/ProductDescription/Features)[1]
');
GO

Yeniden açtığınızda, <Material> öğe düğümü eklenir, yol ifadesi, tek bir hedef döndürmelidir. Bu açıkça [1] ekleyerek ifade sonunda belirtildi.

-- check the update
SELECT x.query(' //ProductDescription/Features')
FROM T;
GO

İ.Temel alan bir açıksa ekleme deyim koşul

Aşağıdaki örnekte, bir IF koşulu ifade1 bir parçası olarak belirtilen ekleme XML DML ekstresi.Durum değeri TRUE ise, öznitelik eklenen <WorkCenter> öğe.

USE AdventureWorks;
GO
DECLARE @myDoc xml
SET @myDoc = 
'<Root>
    <Location LocationID="10" LaborHours="1.2" >
        <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('
insert
if (/Root/Location[@LocationID=10])
then attribute MachineHours {".5"}
else ()
    as first into   (/Root/Location[@LocationID=10])[1] ')
SELECT @myDoc;
GO

Aşağıdaki örnek benzer dışında ekleme XML DML deyim koşul true ise, belgede bir öğe ekler.Diğer bir deyişle, <WorkCenter> öğenin küçüktür veya iki eşittir <step> alt öğeleri.

USE AdventureWorks;
GO
DECLARE @myDoc xml
SET @myDoc = 
'<Root>
    <Location LocationID="10" LaborHours="1.2" >
        <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('
insert
if (count(/Root/Location/step) <= 2)
then element step { "This is a new step" }
else ()
    as last into   (/Root/Location[@LocationID=10])[1] ')
SELECT @myDoc;
GO

Bu sonucu oluşur:

<Root>
 <WorkCenter WorkCenterID="10" LaborHours="1.2">
  <step>Manufacturing step 1 at this work center</step>
  <step>Manufacturing step 2 at this work center</step>
  <step>This is a new step</step>
 </WorkCenter>

j.Düğümlerin yazılı xml sütun ekleme

Bu örnek XML yazılı saklanan bir üretim yönergeleri bir öğe ve öznitelik ekler XML sütun.

Örnekte, ilk tablo (T) yazılı bir oluşturma XML sütun, AdventureWorks veritabanındaki.Bir üretim kopyalamadan sonra gelen yönergeler yönergeleri XML örnek sütun T. tabloya ProductModel tablosundakiEklenenleri sonra tablo T. XML'DE 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           
SELECT Instructions           
FROM T;
-- now insertion begins           
--1) insert a new manu. Location. The <Root> specified as            
-- expression 2 in the insert() must be singleton.    
UPDATE T 
set Instructions.modify(' 
declare namespace MI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"; 
insert <MI:Location LocationID="1000" > 
           <MI:step>New instructions go here</MI:step> 
         </MI:Location> 
as first 
into   (/MI:root)[1] 
') 
         
SELECT Instructions           
FROM T ;
-- 2) insert attributes in the new <Location>           
UPDATE T           
SET Instructions.modify('           
declare namespace MI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";           
insert attribute LaborHours { "1000" }           
into (/MI:root/MI:Location[@LocationID=1000])[1] '); 
GO           
SELECT Instructions           
FROM T ;
GO           
--cleanup           
DROP TABLE T ;
GO