Pengantar Updategrams (SQLXML 4.0)

Berlaku untuk:yes SQL Server (semua versi yang didukung) YesAzure SQL Database

Anda bisa mengubah (menyisipkan, memperbarui, atau menghapus) database di Microsoft SQL Server dari dokumen XML yang sudah ada dengan menggunakan updategram atau fungsi OPENXML Transact-SQL.

Fungsi OPENXML memodifikasi database dengan menghancurkan dokumen XML yang ada dan menyediakan set baris yang dapat diteruskan ke pernyataan INSERT, UPDATE, atau DELETE. Dengan OPENXML, operasi dilakukan langsung terhadap tabel database. Oleh karena itu, OPENXML paling tepat di mana pun penyedia set baris, seperti tabel, dapat muncul sebagai sumber.

Seperti OPENXML, updategram memungkinkan Anda menyisipkan, memperbarui, atau menghapus data dalam database; namun, updategram bekerja terhadap tampilan XML yang disediakan oleh skema XSD (atau XDR) yang diannotasi; misalnya, pembaruan diterapkan ke tampilan XML yang disediakan oleh skema pemetaan. Skema pemetaan, pada gilirannya, memiliki informasi yang diperlukan untuk memetakan elemen dan atribut XML ke tabel dan kolom database yang sesuai. Updategram menggunakan informasi pemetaan ini untuk memperbarui tabel dan kolom database.

Catatan

Dokumentasi ini mengasumsikan bahwa Anda terbiasa dengan templat dan dukungan skema pemetaan di SQL Server. Untuk informasi selengkapnya, lihat Pengantar Skema XSD Terannotasi (SQLXML 4.0). Untuk aplikasi warisan yang menggunakan XDR, lihat Skema XDR Anotasi (Tidak digunakan lagi di SQLXML 4.0).

Namespace yang Diperlukan dalam Updategram

Kata kunci dalam updategram, seperti <sinkronisasi>, sebelum>,< dan <sesudah>, ada di namespace layanan urn:schemas-microsoft-com:xml-updategram. Awalan namespace yang Anda gunakan sewenang-wenang. Dalam dokumentasi ini, awalan updg menunjukkan namespace layanan updategram .

Meninjau Sintaks

Updategram adalah templat dengan <sinkronisasi>, <sebelum>, dan <sesudah> blok yang membentuk sintaks updategram. Kode berikut menunjukkan sintaks ini dalam bentuk yang paling sederhana:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync [mapping-schema= "AnnotatedSchemaFile.xml"] >  
    <updg:before>  
        ...  
    </updg:before>  
    <updg:after>  
        ...  
    </updg:after>  
  </updg:sync>  
</ROOT>  

Definisi berikut menjelaskan peran masing-masing blok ini:

<Sebelum>
Mengidentifikasi status yang ada (juga disebut "status sebelum") dari instans rekaman.

<Setelah>
Mengidentifikasi status baru tempat data akan diubah.

<Sync>
<Berisi blok sebelum> dan <sesudah>. <Blok sinkronisasi> dapat berisi lebih dari <satu set blok sebelum> dan <sesudah>. Jika ada lebih dari satu set <blok sebelum> dan <sesudah> , blok ini (bahkan jika kosong) harus ditentukan sebagai pasangan. Selain itu, updategram dapat memiliki lebih dari satu <blok sinkronisasi> . Setiap <blok sinkronisasi> adalah satu unit transaksi (yang berarti bahwa semua yang ada di <blok sinkronisasi> dilakukan atau tidak ada yang dilakukan). Jika Anda menentukan beberapa <blok sinkronisasi> dalam updategram, kegagalan satu <blok sinkronisasi> tidak memengaruhi blok sinkronisasi> lainnya<.

Apakah updategram menghapus, menyisipkan, atau memperbarui instans rekaman bergantung pada konten <blok sebelum> dan <sesudah> :

  • Jika instans rekaman hanya muncul di <blok sebelum> tanpa instans yang sesuai di <blok setelah> , updategram akan melakukan operasi penghapusan.

  • Jika instans rekaman hanya muncul di <blok setelah> tanpa instans yang sesuai di <blok sebelumnya> , ini adalah operasi penyisipan.

  • Jika instans rekaman muncul di <blok sebelumnya> dan memiliki instans yang sesuai di <blok setelah> , ini adalah operasi pembaruan. Dalam hal ini, updategram memperbarui instans rekaman ke nilai yang ditentukan dalam <blok setelah> .

Menentukan Skema Pemetaan di Updategram

Dalam updategram, abstraksi XML yang disediakan oleh skema pemetaan (skema XSD dan XDR didukung) dapat bersifat implisit atau eksplisit (yaitu, updategram dapat bekerja dengan atau tanpa skema pemetaan tertentu). Jika Anda tidak menentukan skema pemetaan, updategram mengasumsikan pemetaan implisit (pemetaan default), di mana setiap elemen di <blok sebelum> atau <setelah> blok memetakan ke tabel dan elemen turunan setiap elemen atau peta atribut ke kolom dalam database. Jika Anda secara eksplisit menentukan skema pemetaan, elemen dan atribut dalam updategram harus cocok dengan elemen dan atribut dalam skema pemetaan.

Pemetaan implisit (default)

Dalam kebanyakan kasus, updategram yang melakukan pembaruan sederhana mungkin tidak memerlukan skema pemetaan. Dalam hal ini, updategram bergantung pada skema pemetaan default.

Updategram berikut menunjukkan pemetaan implisit. Dalam contoh ini, updategram menyisipkan pelanggan baru di tabel Sales.Customer. Karena pembaruan ini menggunakan pemetaan implisit, <elemen Sales.Customer> memetakan ke tabel Sales.Customer, dan atribut CustomerID dan SalesPersonID dipetakan ke kolom yang sesuai dalam tabel Sales.Customer.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
<updg:sync >  
<updg:before>  
</updg:before>  
<updg:after>  
    <Sales.Customer CustomerID="1" SalesPersonID="277" />  
    </updg:after>  
</updg:sync>  
</ROOT>  

Pemetaan Eksplisit

Jika Anda menentukan skema pemetaan (XSD atau XDR), updategram menggunakan skema untuk menentukan tabel database dan kolom yang akan diperbarui.

Jika updategram melakukan pembaruan yang kompleks (misalnya, menyisipkan rekaman dalam beberapa tabel berdasarkan hubungan induk-anak yang ditentukan dalam skema pemetaan), Anda harus secara eksplisit menyediakan skema pemetaan dengan menggunakan atribut pemetaan-skema tempat updategram dijalankan.

Karena updategram adalah templat, jalur yang ditentukan untuk skema pemetaan dalam updategram relatif terhadap lokasi file templat (relatif terhadap tempat updategram disimpan). Untuk informasi selengkapnya, lihat Menentukan Skema Pemetaan Anotasi dalam Updategram (SQLXML 4.0).

Pemetaan elemen-sentris dan Atribut-sentris di Updategrams

Dengan pemetaan default (ketika skema pemetaan tidak ditentukan dalam updategram), elemen updategram memetakan ke tabel dan elemen anak (dalam kasus pemetaan yang ber sentris elemen) dan atribut (dalam kasus pemetaan atribut-sentris) memetakan ke kolom.

Pemetaan elemen-sentris

Dalam updategram yang berpusat pada elemen, elemen berisi elemen anak yang menunjukkan properti elemen . Sebagai contoh, lihat updategram berikut. Elemen <Person.Contact> berisi <elemen anak FirstName> dan <LastName> . Elemen anak ini adalah properti dari <elemen Person.Contact> .

Karena updategram ini tidak menentukan skema pemetaan, updategram menggunakan pemetaan implisit, di mana <elemen Person.Contact> memetakan ke tabel Person.Contact dan elemen turunannya dipetakan ke kolom FirstName dan LastName.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
<updg:sync >  
  <updg:after>  
    <Person.Contact>  
       <FirstName>Catherine</FirstName>  
       <LastName>Abel</LastName>  
    </Person.Contact>  
  </updg:after>  
</updg:sync>  
</ROOT>  

Pemetaan yang ber sentris atribut

Dalam pemetaan yang ber sentris atribut, elemen memiliki atribut . Updategram berikut menggunakan pemetaan atribut-sentris. Dalam contoh ini, <elemen Person.Contact> terdiri dari atribut FirstName dan LastName . Atribut ini adalah properti elemen <Person.Contact> . Seperti dalam contoh sebelumnya, updategram ini tidak menentukan skema pemetaan, sehingga bergantung pada pemetaan implisit untuk memetakan <elemen Person.Contact> ke tabel Person.Contact dan atribut elemen ke kolom masing-masing dalam tabel.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
<updg:sync >  
  <updg:before>  
  </updg:before>  
  <updg:after>  
    <Person.Contact FirstName="Catherine" LastName="Abel" />  
  </updg:after>  
</updg:sync>  
</ROOT>  

Menggunakan Pemetaan elemen-sentris dan Atribut-sentris

Anda dapat menentukan campuran pemetaan elemen-sentris dan atribut-sentris, seperti yang ditunjukkan dalam updategram berikut. Perhatikan bahwa <elemen Person.Contact> berisi atribut dan elemen anak. Selain itu, updategram ini bergantung pada pemetaan implisit. Dengan demikian, atribut FirstName dan <peta elemen turunan LastName> ke kolom terkait dalam tabel Person.Contact.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
<updg:sync >  
  <updg:before>  
  </updg:before>  
  <updg:after>  
    <Person.Contact FirstName="Catherine" >  
       <LastName>Abel</LastName>  
    </Person.Contact>  
  </updg:after>  
</updg:sync>  
</ROOT>  

Bekerja dengan Karakter Valid di SQL Server tetapi Tidak Valid di XML

Dalam SQL Server, nama tabel dapat menyertakan spasi. Namun, tipe nama tabel ini tidak valid di XML.

Untuk mengodekan karakter yang valid SQL Server pengidentifikasi tetapi bukan pengidentifikasi XML yang valid, gunakan '__xHHHH__' sebagai nilai pengodean, di mana HHHH adalah singkatan dari kode UCS-2 heksadesimal empat digit untuk karakter dalam urutan bit-first yang paling signifikan. Menggunakan skema pengodean ini, karakter spasi diganti dengan x0020 (kode heksadesimal empat digit untuk karakter spasi); dengan demikian, nama tabel [Detail Pesanan] di SQL Server menjadi _x005B_Order_x0020_Details_x005D_ di XML.

Demikian pula, Anda mungkin perlu menentukan nama elemen tiga bagian, seperti <[database].[ pemilik]. [tabel]>. Karena karakter kurung siku ([ dan ]) tidak valid di XML, Anda harus menentukan ini sebagai <_x005B_database_x005D_._x005B_owner_x005D_._x005B_table_x005D_>, di mana _x005B_ adalah pengodean untuk tanda kurung kiri ([) dan _x005D_ adalah pengodean untuk tanda kurung kanan (]).

Menjalankan Updategram

Karena updategram adalah templat, semua mekanisme pemrosesan templat berlaku untuk updategram. Untuk SQLXML 4.0, Anda dapat menjalankan updategram dengan salah satu cara berikut:

  • Dengan mengirimkannya dalam perintah ADO.

  • Dengan mengirimkannya sebagai perintah OLE DB.

Lihat juga

Pertimbangan Keamanan Updategram (SQLXML 4.0)