Membuat variabel dan kolom tipe data XML
Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
Jenis data xml adalah jenis data bawaan di SQL Server dan agak mirip dengan jenis bawaan lainnya seperti int dan varchar. Seperti jenis bawaan lainnya, Anda dapat menggunakan tipe data xml sebagai jenis kolom saat membuat tabel sebagai jenis variabel, jenis parameter, jenis pengembalian fungsi, atau di CAST dan CONVERT.
Membuat kolom dan variabel
Untuk membuat xml
kolom jenis sebagai bagian dari tabel, gunakan pernyataan, seperti yang CREATE TABLE
diperlihatkan dalam contoh berikut:
CREATE TABLE T1(Col1 int primary key, Col2 xml);
Anda dapat menggunakan DECLARE statement
untuk membuat variabel jenis xml
, seperti yang ditunjukkan contoh berikut.
DECLARE @x xml;
Buat variabel yang diketik xml
dengan menentukan koleksi skema XML, seperti yang diperlihatkan dalam contoh berikut.
DECLARE @x xml (Sales.StoreSurveySchemaCollection)
Untuk meneruskan xml
parameter jenis ke prosedur tersimpan, gunakan pernyataan, seperti yang CREATE PROCEDURE
ditunjukkan dalam contoh berikut.
CREATE PROCEDURE SampleProc(@XmlDoc xml) AS ...
Anda dapat menggunakan XQuery untuk mengkueri instans XML yang disimpan dalam kolom, parameter, atau variabel. Anda juga dapat menggunakan Xml Data Manipulation Language (XML DML) untuk menerapkan pembaruan ke instans XML. Karena standar XQuery tidak menentukan XQuery DML pada saat pengembangan, SQL Server memperkenalkan ekstensi Bahasa Modifikasi Data XML ke XQuery. Ekstensi ini memungkinkan Anda melakukan operasi sisipkan, perbarui, dan hapus.
Menetapkan default
Dalam tabel, Anda bisa menetapkan instans XML default ke kolom jenis xml . Anda dapat menyediakan XML default dengan salah satu dari dua cara: dengan menggunakan konstanta XML, atau dengan menggunakan transmisi eksplisit ke jenis xml .
Untuk menyediakan XML default sebagai konstanta XML, gunakan sintaks seperti yang diperlihatkan dalam contoh berikut. String secara implisit CAST ke jenis xml .
CREATE TABLE T (XmlColumn xml default N'<element1/><element2/>')
Untuk menyediakan XML default sebagai eksplisit CAST
ke xml
, gunakan sintaks seperti yang ditunjukkan dalam contoh berikut.
CREATE TABLE T (XmlColumn xml
default CAST(N'<element1/><element2/>' AS xml))
SQL Server juga mendukung batasan NULL dan NOT NULL pada kolom jenis xml . Contohnya:
CREATE TABLE T (XmlColumn xml NOT NULL)
Tentukan batasan
Saat membuat kolom jenis xml , Anda bisa menentukan batasan tingkat kolom atau tingkat tabel. Gunakan batasan dalam situasi berikut:
Aturan bisnis Anda tidak dapat diekspresikan dalam skema XML. Misalnya, alamat pengiriman toko bunga harus berada dalam jarak 50 mil dari lokasi bisnisnya. Ini dapat ditulis sebagai batasan pada kolom XML. Batasan mungkin melibatkan metode jenis data xml .
Batasan Anda melibatkan kolom XML atau non-XML lainnya dalam tabel. Contohnya adalah penegakan ID Pelanggan (
/Customer/@CustId
) yang ditemukan dalam instans XML agar sesuai dengan nilai dalam kolom CustomerID relasional.
Anda dapat menentukan batasan untuk kolom tipe data xml yang diketik atau tidak diketik. Namun, Anda tidak dapat menggunakan metode jenis data XML saat menentukan batasan.
Tipe data xml tidak mendukung batasan kolom dan tabel berikut:
KUNCI PRIMER/KUNCI ASING
UNIQUE
COLLATE
XML menyediakan pengodeannya sendiri. Kolabasi hanya berlaku untuk jenis string. Jenis data xml bukan jenis string. Namun, ia memang memiliki representasi string dan memungkinkan transmisi ke dan dari jenis data string.
ATURAN
Alternatif untuk menggunakan batasan adalah membuat pembungkus, fungsi yang ditentukan pengguna untuk membungkus metode jenis data xml dan menentukan fungsi yang ditentukan pengguna dalam batasan pemeriksaan seperti yang ditunjukkan dalam contoh berikut.
Dalam contoh berikut, batasan pada Col2
menentukan bahwa setiap instans XML yang disimpan dalam kolom ini harus memiliki <ProductDescription>
elemen yang berisi ProductID
atribut. Batasan ini diberlakukan oleh fungsi yang ditentukan pengguna ini:
CREATE FUNCTION my_udf(@var xml) returns bit
AS BEGIN
RETURN @var.exist('/ProductDescription/@ProductID')
END;
GO
Metode exist()
jenis data xml mengembalikan jika <ProductDescription>
elemen dalam instans 1
berisi ProductID
atribut . Jika tidak, ia kembali 0
.
Sekarang, Anda dapat membuat tabel dengan batasan tingkat kolom sebagai berikut:
CREATE TABLE T (
Col1 int primary key,
Col2 xml check(dbo.my_udf(Col2) = 1));
GO
Penyisipan berikut berhasil:
INSERT INTO T values(1,'<ProductDescription ProductID="1" />');
Karena batasan, penyisipan berikut gagal:
INSERT INTO T values(1,'<Product />');
Tabel yang sama atau berbeda
Kolom tipe data xml dapat dibuat dalam tabel yang berisi kolom relasional lainnya, atau dalam tabel terpisah dengan hubungan kunci asing ke tabel utama.
Buat kolom tipe data xml dalam tabel yang sama saat salah satu kondisi berikut ini benar:
Aplikasi Anda melakukan pengambilan data pada kolom XML dan tidak memerlukan indeks XML pada kolom XML.
Anda ingin membuat indeks XML pada kolom tipe data xml dan kunci utama tabel utama sama dengan kunci pengklusterannya. Untuk informasi selengkapnya, lihat Indeks XML (SQL Server).
Buat kolom tipe data xml dalam tabel terpisah jika kondisi berikut ini benar:
Anda ingin membuat indeks XML pada kolom tipe data xml , tetapi kunci utama tabel utama berbeda dari kunci pengklusterannya, atau tabel utama tidak memiliki kunci utama, atau tabel utama adalah timbunan (tanpa kunci pengklusteran). Ini mungkin benar jika tabel utama sudah ada.
Anda tidak ingin pemindaian tabel melambat karena adanya kolom XML dalam tabel. Ini menggunakan spasi apakah disimpan dalam baris atau di luar baris.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk