Opsi kueri XML dan data yang dipertahankan
Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance
Artikel ini menjelaskan opsi kueri yang harus Anda tentukan untuk mengkueri data XML. Ini juga menjelaskan bagian instans XML yang tidak dipertahankan saat disimpan dalam database.
Mengatur opsi kueri yang diperlukan
Saat Anda mengkueri kolom atau variabel tipe xml menggunakan metode tipe data xml , opsi berikut harus diatur seperti yang diperlihatkan.
ATUR Opsi | Nilai yang Diperlukan |
---|---|
ANSI_NULLS | AKTIF |
ANSI_PADDING | AKTIF |
ANSI_WARNINGS | AKTIF |
ARITHABORT | AKTIF |
CONCAT_NULL_YIELDS_NULL | AKTIF |
NUMERIC_ROUNDABORT | TIDAK AKTIF |
QUOTED_IDENTIFIER | AKTIF |
Jika opsi tidak diatur seperti yang ditunjukkan, kueri dan modifikasi pada metode jenis data xml akan gagal.
Fitur instans XML yang tidak dipertahankan
SQL Server mempertahankan konten instans XML, tetapi tidak mempertahankan aspek instans XML yang tidak dianggap signifikan dalam model data XML. Ini berarti bahwa instans XML yang diambil mungkin tidak identik dengan instans yang disimpan di server, tetapi akan berisi informasi yang sama.
Deklarasi XML
Deklarasi XML dalam instans tidak dipertahankan saat instans disimpan dalam database. Contohnya:
CREATE TABLE T1 (Col1 int primary key, Col2 xml);
GO
INSERT INTO T1 values (1, '<?xml version="1.0" encoding="windows-1252" ?><doc></doc>');
GO
SELECT Col2
FROM T1;
Hasilnya adalah <doc/>
.
Deklarasi XML, seperti <?xml version='1.0'?>
, tidak dipertahankan saat menyimpan data XML dalam instans jenis data xml . Ini memang disengaja. Deklarasi XML () dan atributnya (versi/pengodean/berdiri sendiri) hilang setelah data dikonversi ke jenis xml. Deklarasi XML diperlakukan sebagai arahan ke pengurai XML. Data XML disimpan secara internal sebagai ucs-2. Semua API lain dalam instans XML dipertahankan.
Urutan atribut
Urutan atribut dalam instans XML tidak dipertahankan. Saat Anda mengkueri instans XML yang disimpan di kolom jenis xml , urutan atribut dalam XML yang dihasilkan mungkin berbeda dari instans XML asli.
Tanda kutip di sekitar nilai atribut
Tanda kutip tunggal dan tanda kutip ganda di sekitar nilai atribut tidak dipertahankan. Nilai atribut disimpan dalam database sebagai pasangan nama dan nilai. Tanda kutip tidak disimpan. Saat XQuery dijalankan terhadap instans XML, XML yang dihasilkan diserialisasikan dengan tanda kutip ganda di sekitar nilai atribut.
DECLARE @x xml;
-- Use double quotation marks.
SET @x = '<root a="1" />';
SELECT @x;
GO
DECLARE @x xml;
-- Use single quotation marks.
SET @x = '<root a=''1'' />';
SELECT @x;
GO
Kedua kueri mengembalikan = <root a="1" />
.
Awalan namespace
Awalan namespace tidak dipertahankan. Saat Anda menentukan XQuery terhadap kolom jenis xml , hasil XML yang diserialisasikan dapat mengembalikan awalan namespace yang berbeda.
DECLARE @x xml;
SET @x = '<ns1:root xmlns:ns1="abc" xmlns:ns2="abc">
<ns2:SomeElement/>
</ns1:root>';
SELECT @x;
SELECT @x.query('/*');
GO
Awalan namespace dalam hasil mungkin berbeda. Contohnya:
<p1:root xmlns:p1="abc"><p1:SomeElement/></p1:root>