Pada SQL Server 2005 kita juga bisa mengembalikan kolom bertipe data xml dengan klausa WITH pada fungsi OPENXML, seperti terlihat pada contoh sebagai berikut :
Select * From OpenXML(@docHandle,'SalesInvoice',1)
With
(InvoiceID int,
CustomerID int,
OrderDate datetime,
Items xml 'items')
Perlu diketahui dan diingat, jika di SQL Server 2000 document handle yang dikembalikan oleh sp_xml_preparedocument dipertahankan sampai session berakhir (walaupun variabel yang digunakan untuk mengaksesnya telah hilang/diluar scope), di SQL Server 2005 document handle tersebut akan dihapus pada akhir batch. Hal ini dilakukan untuk mengurangi beban sumberdaya diserver.
Menyimpan XML dalan Database
Meskipun anda bisa menghasilkan XML dari baris data dan membacanya dari dokumen XML menggunakan perintah OPENXML, versi 2005 bisa menyimpan hasil xml kedalam tabel database menggunakan tipe data xml.
Beberapa manfaat yang bisa anda dapat dengan tipe data xml adalah :
- Kemampuan menyimpan data yang terstruktur dan semi-terstruktur dalam satu tempat.
- Pendefinisian isi variabel didalam sebuah model relasional.
- Pemilihan model data yang paling sesuai untuk kebutuhan aplikasi yang spesifik sambil tetap mengambil manfaat dari penyimpanan data yang teroptimasi dan lingkungan query.
Tipe data xml pada SQL Server 2005 menyimpan InfoSet dokumen XML dalam format internal yang efisien. Data disimpan seperti dokumen XML yang asli, kecuali spasi-spasi yang tidak signifikan, urutan atribut, prefiks namespace, dan deklarasi XML. Fungsionalitas yang disediakan SQL server 2005 pada tipe data xml adalah :
- XML indexing. Kolom yang didefinisikan sebagai xml bisa diindex menggunakan indeks XML dan indeks FULL-TEXT. Hal ini bisa meningkatkan kinerja query terhadap data XML secara signifikan.
- XQuery-based data retrieval methods. Tipe data xml menyediakan method query, value, dan exits yang bisa digunakan untuk mengekstract data dari data XML menggunakan ekspresi XQuery.
- XQuery-based data modification. Tipe data xml menyediakan method modify yang menggunakan sebuah ekstensi dari spesifikasi XQuery untuk melakukan update terhadap data XML.
tipe data xml mendukung typed dan untyped XML sekaligus. Perbandingan antara keduanya sebagai berikut:
Untyped XML
Untuk membuat sebuah kolom bertipe xml, sama seperti membuat kolom dengan tipe data lain. Sedangkan untuk membuat sebuah variabel xml untyped, spesifikasikan tipe data xml pada pernyataan DECLARE.
DECLARE @itemDoc xml
Cara termudah untuk memberikan nilai pada variabel atau kolom untyped xml adalah memberikan sebuah nilai string (varchar, nvarchar, text, atau ntext) yang berisi dokumen atau fragmen XML yang tersusun dengan baik. SQL Server akan otomatis mengubah nilai tersebut menjadi tipe xml. Cara seperti ini disebut impilicity casting.
Contoh :
DECLARE @itemString nvarchar(2000)
SET @itemString = '<items>
<Item ProductID="2" Quantity="3" />
<Item ProductID="4" Quantity="1" />
</Items>'
DECLARE @itemDoc xml
SET @itemDoc = @itemString
Insert Into Sales.Invoices
Values (1,GetDate(),@itemDoc)