Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Database SQL di Microsoft Fabric
Artikel ini menjelaskan cara membuat instans XML.
Di SQL Server, Anda dapat menghasilkan instans XML dengan cara berikut:
- Ketik instans string transmisi.
- Menggunakan pernyataan
SELECTdengan klausulFOR XML. - Menggunakan penetapan konstanta.
- Menggunakan beban massal.
Ketik string cast dan instans biner
Anda dapat mengurai salah satu jenis data string SQL Server, seperti [n]varchar, [n]char, [n]text, varbinary, dan image, ke dalam jenis data xml dengan mentransmisikan (CAST) atau mengonversi (CONVERT) string ke jenis data xml . XML yang tidak bertipe diperiksa untuk mengonfirmasi bahwa XML tersebut sudah dibentuk dengan baik. Jika ada skema yang terkait dengan jenis xml , validasi juga dilakukan. Untuk informasi selengkapnya, lihat Membandingkan XML bertipe dengan XML yang tidak bertipe.
Dokumen XML dapat dikodekan dengan pengodean yang berbeda (misalnya, UTF-8, UTF-16, Windows-1252). Berikut ini menguraikan aturan tentang bagaimana string dan jenis sumber biner berinteraksi dengan pengodean dokumen XML dan bagaimana pengurai bereaksi.
Karena nvarchar mengasumsikan pengodean Unicode 2-byte seperti UTF-16 atau UCS-2, pengurai XML memperlakukan nilai string sebagai dokumen atau fragmen XML yang dikodekan Unicode 2-byte. Dokumen XML perlu dikodekan dalam pengodean Unicode 2-byte juga agar kompatibel dengan jenis data sumber. Dokumen XML yang dikodekan UTF-16 dapat memiliki tanda urutan byte (BOM) UTF-16, tetapi tidak perlu, karena konteks jenis sumber membuatnya jelas bahwa itu hanya dapat menjadi dokumen yang dikodekan Unicode 2-byte.
Konten string varchar diperlakukan sebagai dokumen/fragmen XML yang dikodekan 1 byte oleh pengurai XML. Karena string sumber varchar memiliki halaman kode yang terkait, pengurai menggunakan halaman kode tersebut untuk pengodean jika tidak ada pengodean eksplisit yang ditentukan dalam XML itu sendiri. Jika instans XML memiliki BOM atau deklarasi pengodean, BOM atau deklarasi harus konsisten dengan halaman kode, jika tidak, pengurai melaporkan kesalahan.
Konten varbinary diperlakukan sebagai aliran codepoint yang diteruskan langsung ke pengurai XML. Dengan demikian, dokumen atau fragmen XML perlu menyediakan BOM atau informasi pengodean lainnya langsung dalam baris. Pengurai hanya melihat aliran untuk menentukan pengodean. Ini berarti bahwa XML yang dikodekan UTF-16 perlu menyediakan UTF-16 BOM, dan instans tanpa BOM dan tanpa pengodean deklarasi, ditafsirkan sebagai UTF-8.
Jika pengodean dokumen XML tidak diketahui sebelumnya dan data diteruskan sebagai string atau data biner alih-alih data XML sebelum transmisi ke XML, Anda harus memperlakukan data sebagai varbinary. Misalnya, saat membaca data dari file XML menggunakan OpenRowset(), seseorang harus menentukan data yang akan dibaca sebagai nilai varbinary(maks):
SELECT CAST(x AS XML)
FROM OpenRowset(BULK 'filename.xml', SINGLE_BLOB) R(x);
SQL Server secara internal mewakili XML dalam representasi biner efisien yang menggunakan pengodean UTF-16. Pengodean yang disediakan pengguna tidak dipertahankan, tetapi dipertimbangkan selama proses penguraian.
Konversi tipe untuk jenis yang didefinisikan pengguna CLR
Jika jenis yang ditentukan pengguna CLR memiliki Serialisasi XML, instans jenis tersebut dapat secara eksplisit ditransmisikan ke jenis data XML. Untuk informasi selengkapnya tentang serialisasi XML dari jenis yang ditentukan pengguna CLR, lihat Serialisasi XML dari Objek Database CLR.
Menangani spasi kosong dalam XML yang ditik
Di SQL Server, spasi kosong di dalam konten elemen diabaikan jika terjadi di dalam urutan data karakter khusus spasi putih yang dibatasi oleh markup, seperti tag mulai atau akhir, dan tidak diberi entitas. (CDATA bagian diabaikan.) Penanganan ruang kosong ini berbeda dengan bagaimana ruang kosong dijelaskan dalam spesifikasi XML 1.0 yang diterbitkan oleh World Wide Web Consortium (W3C). Ini karena pengurai XML di SQL Server hanya mengenali jumlah subset DTD yang terbatas, seperti yang didefinisikan dalam XML 1.0. Untuk informasi selengkapnya tentang subset DTD terbatas yang didukung di SQL Server, lihat CAST dan CONVERT.
Secara default, pengurai XML membuang spasi kosong yang tidak signifikan saat mengonversi data string ke XML jika salah satu opsi berikut ini benar:
Atribut
xml:spacetidak didefinisikan pada elemen atau elemen leluhurnya.Atribut
xml:spaceyang berlaku pada elemen, atau salah satu elemen leluhurnya, memiliki nilai default.
Contohnya:
DECLARE @x XML;
SET @x = '<root> <child/> </root>';
SELECT @x;
Berikut kumpulan hasilnya.
<root><child/></root>
Namun, Anda dapat mengubah perilaku ini. Untuk mempertahankan spasi kosong untuk instans xml DT, gunakan operator CONVERT dan parameternya gaya opsional yang diatur dengan nilai 1. Contohnya:
SELECT CONVERT(XML, N'<root> <child/> </root>', 1);
Jika parameter gaya tidak digunakan, atau nilainya diatur ke 0, spasi kosong yang tidak signifikan tidak dipertahankan untuk konversi instans DT xml. Untuk informasi selengkapnya tentang cara menggunakan CONVERT operator dan parameter gayanya saat mengonversi data string ke instans DT xml, lihat CAST dan CONVERT.
Contoh: Mentransmisikan nilai string ke XML yang diketik dan menetapkannya ke kolom
Contoh berikut mentransmisikan variabel string yang berisi fragmen XML ke jenis data xml lalu menyimpannya di kolom jenis xml :
CREATE TABLE T (
c1 INT PRIMARY KEY,
c2 XML
);
GO
DECLARE @s VARCHAR(100);
SET @s = '<Cust><Fname>Andrew</Fname><Lname>Fuller</Lname></Cust>';
Operasi sisipkan berikut secara implisit mengonversi dari string ke jenis xml :
INSERT INTO T
VALUES (3, @s);
Anda dapat mengonversi string secara eksplisit ke jenis CAST:
INSERT INTO T
VALUES (3, CAST(@s AS XML));
Atau Anda dapat menggunakan CONVERT, seperti yang ditunjukkan dalam sampel kode berikut:
INSERT INTO T
VALUES (3, CONVERT(XML, @s));
Contoh: Mengonversi string ke XML yang ditik dan menetapkannya ke variabel
Dalam contoh berikut, string dikonversi ke jenis xml dan ditetapkan ke variabel jenis data xml :
DECLARE @x XML;
DECLARE @s VARCHAR(100);
SET @s = '<Cust><Fname>Andrew</Fname><Lname>Fuller</Lname></Cust>';
SET @x = CONVERT(XML, @s);
SELECT @x;
Menggunakan pernyataan SELECT dengan klausul FOR XML
Anda dapat menggunakan FOR XML klausa dalam SELECT pernyataan untuk mengembalikan hasil sebagai XML. Contohnya:
DECLARE @xmlDoc XML;
SET @xmlDoc = (
SELECT Column1, Column2
FROM Table1, Table2
WHERE <some_condition>
FOR XML AUTO
)
...;
SELECT Pernyataan mencetuskan fragmen XML tekstual yang kemudian diuraikan saat penugasan ke variabel jenis data xml.
Anda juga bisa menggunakan direktif TYPE dalam kueri FOR XML di dalam klausa FOR XML yang langsung mengembalikan hasil kueri sebagai tipe FOR XML:
DECLARE @xmlDoc XML;
SET @xmlDoc = (
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID = 19
FOR XML AUTO, TYPE
);
SELECT @xmlDoc;
Berikut kumpulan hasilnya.
<Production.ProductModel ProductModelID="19" Name="Mountain-100" />...
Dalam contoh berikut, hasil xml dari kueri FOR XML disisipkan ke dalam kolom tipe xml:
CREATE TABLE T1 (
c1 INT,
c2 XML
);
GO
INSERT T1 (c1, c2)
SELECT 1, (
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID = 19
FOR XML AUTO, TYPE
);
SELECT *
FROM T1;
GO
Untuk informasi selengkapnya tentang FOR XML, lihat UNTUK XML (SQL Server).
Catatan
SQL Server mengembalikan instans jenis data xml ke klien sebagai hasil dari berbagai konstruksi server, seperti FOR XML kueri yang menggunakan TYPE direktif, atau ketika jenis data xml digunakan untuk mengembalikan XML dari kolom, variabel, dan parameter output Mesin Database SQL Server. Dalam kode aplikasi klien, penyedia ADO.NET meminta agar informasi jenis data xml ini dikirim dalam pengodean biner dari server. Namun, jika Anda menggunakan FOR XML tanpa direktif TYPE , data XML akan ditampilkan sebagai jenis string. Bagaimanapun, penyedia klien akan selalu dapat menangani salah satu bentuk XML.
Gunakan penugasan konstanta
Konstanta string dapat digunakan ketika instans jenis data xml diharapkan. Penugasan ini sama dengan tersirat CAST dari string ke XML. Contohnya:
DECLARE @xmlDoc XML;
SET @xmlDoc = '<Cust><Fname>Andrew</Fname><Lname>Fuller</Lname></Cust>';
-- Or
SET @xmlDoc = N'<?xml version="1.0" encoding="ucs-2"?><doc/>';
Contoh sebelumnya secara implisit mengonversi string ke jenis data xml dan menetapkannya ke variabel jenis xml .
Contoh berikut menyisipkan string konstanta ke dalam kolom jenis xml :
CREATE TABLE T (
c1 INT PRIMARY KEY,
c2 XML
);
INSERT INTO T
VALUES (3, '<Cust><Fname>Andrew</Fname><Lname>Fuller</Lname></Cust>');
Catatan
Untuk XML yang diketik, XML divalidasi terhadap skema yang ditentukan. Untuk informasi selengkapnya, lihat Membandingkan XML bertipe dengan XML yang tidak bertipe.
Menggunakan pemuatan massal
Fungsionalitas OPENROWSET yang disempurnakan memungkinkan Anda memuat dokumen XML secara massal dalam database. Anda dapat memuat instans XML secara massal dari file ke dalam kolom jenis xml dalam database. Untuk sampel kerja, lihat Contoh impor massal dan ekspor dokumen XML (SQL Server). Untuk informasi selengkapnya tentang memuat dokumen XML, lihat Memuat data XML.
Di bagian ini
| Artikel | Deskripsi |
|---|---|
| Opsi kueri XML dan data yang dipertahankan | Menjelaskan bagian instans XML yang tidak dipertahankan saat disimpan dalam database. |