Memuat data XML

Berlaku untuk:SQL ServerAzure SQL Database

Anda dapat mentransfer data XML ke SQL Server dengan beberapa cara. Contohnya:

  • Jika Anda memiliki data dalam kolom [n]teks atau gambar dalam database SQL Server, Anda bisa mengimpor tabel dengan menggunakan Layanan Integrasi. Ubah tipe kolom menjadi XML dengan menggunakan pernyataan ALTER TABLE.

  • Anda dapat menyalin data Anda secara massal dari database SQL Server lain dengan menggunakan bcp out, lalu menyisipkan data secara massal ke database versi yang lebih baru dengan menggunakan bcp masuk.

  • Jika Anda memiliki data dalam kolom relasional dalam database SQL Server, buat tabel baru dengan kolom teks [n]dan, secara opsional, kolom kunci utama untuk pengidentifikasi baris. Gunakan pemrograman sisi klien untuk mengambil XML yang dihasilkan di server dengan FOR XML dan tulis ke dalam kolom teks [n]. Kemudian, gunakan teknik yang disebutkan sebelumnya untuk mentransfer data ke database versi yang lebih baru. Anda dapat memilih untuk menulis XML ke dalam kolom XML di database versi yang lebih baru secara langsung.

Memuat data XML secara massal

Anda dapat memuat data XML secara massal ke server dengan menggunakan kemampuan pemuatan massal SQL Server, seperti bcp. OPENROWSET memungkinkan Anda memuat data ke dalam kolom XML dari file. Contoh berikut mengilustrasikan poin ini.

Contoh: Memuat XML dari file

Contoh ini memperlihatkan cara menyisipkan baris dalam tabel T. Nilai kolom XML dimuat dari file C:\MyFile\xmlfile.xml sebagai CLOB, dan kolom bilangan bulat disediakan nilai 10.

INSERT INTO T
SELECT 10, xCol
FROM    (SELECT *
    FROM OPENROWSET (BULK 'C:\MyFile\xmlfile.xml', SINGLE_BLOB)
AS xCol) AS R(xCol);

Pengodean teks

SQL Server menyimpan data XML di Unicode (UTF-16). Data XML yang diambil dari server keluar dalam pengodean UTF-16. Jika Anda menginginkan pengodean yang berbeda, Anda harus melakukan konversi yang diperlukan pada data yang diambil. Terkadang, data XML mungkin berada dalam pengodean yang berbeda. Jika ya, Anda harus menggunakan perawatan selama pemuatan data. Contohnya:

  • Jika XML teks Anda berada di Unicode (UCS-2, UTF-16), Anda dapat menetapkannya ke kolom XML, variabel, atau parameter tanpa masalah.

  • Jika pengodean bukan Unicode dan implisit, karena halaman kode sumber, halaman kode string dalam database harus sama dengan atau kompatibel dengan titik kode yang ingin Anda muat. Jika perlu, gunakan COLLATE. Jika tidak ada halaman kode server tersebut, Anda harus menambahkan deklarasi XML eksplisit dengan pengodean yang benar.

  • Untuk menggunakan pengodean eksplisit, gunakan jenis varbinary(), yang tidak memiliki interaksi dengan halaman kode, atau gunakan jenis string dari halaman kode yang sesuai. Kemudian, tetapkan data ke kolom XML, variabel, atau parameter.

Contoh: Secara eksplisit menentukan pengodean

Misalnya Anda memiliki dokumen XML, vcdoc, disimpan sebagai varchar(max) yang tidak memiliki deklarasi XML eksplisit. Pernyataan berikut menambahkan deklarasi XML dengan pengodean "iso8859-1", menggabungkan dokumen XML, melemparkan hasilnya ke varbinary(max) sehingga representasi byte dipertahankan, lalu akhirnya melemparkannya ke XML. Ini memungkinkan prosesor XML untuk mengurai data sesuai dengan pengodean yang ditentukan "iso8859-1" dan menghasilkan representasi UTF-16 yang sesuai untuk nilai string.

SELECT CAST(
CAST (('<?xml version="1.0" encoding="iso8859-1"?>'+ vcdoc) AS VARBINARY (MAX))
AS XML);

Ketidakcocokan pengodean string

Jika Anda menyalin dan menempelkan XML sebagai string literal ke jendela Editor Kueri di SQL Server Management Studio, Anda mungkin mengalami ketidakcocokan pengodean string varchar [n]. Ini akan bergantung pada pengodean instans XML Anda. Dalam banyak kasus, Anda mungkin ingin menghapus deklarasi XML. Contohnya:

<?xml version="1.0" encoding="UTF-8"?>
  <xsd:schema ...

Anda kemudian harus mengawali string dengan N untuk menjadikan instans XML sebagai instans Unicode. Contohnya:

-- Assign XML instance to a variable.
DECLARE @X XML
SET @X = N'...'
-- Insert XML instance into an xml type column.
INSERT INTO T VALUES (N'...')
-- Create an XML schema collection
CREATE XML SCHEMA COLLECTION XMLCOLL1 AS N'<xsd:schema ... '

Baca juga