KETIK direktif dalam kueri XML UNTUK
Berlaku untuk: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Dukungan SQL Server untuk jenis data xml (Transact-SQL) memungkinkan Anda meminta secara opsional agar hasil kueri FOR XML dikembalikan sebagai xml dengan menentukan direktif TYPE. Ini memungkinkan Anda memproses hasil kueri FOR XML di server. Misalnya, Anda dapat menentukan XQuery terhadapnya, menetapkan hasilnya ke variabel jenis xml , atau menulis kueri XML Berlapis UNTUK XML.
Catatan
SQL Server mengembalikan data instans jenis data xml ke klien sebagai hasil dari konstruksi server yang berbeda seperti kueri FOR XML yang menggunakan direktif TYPE, atau di mana jenis data xml digunakan untuk mengembalikan nilai data instans XML dari kolom tabel SQL dan parameter output. Dalam kode aplikasi klien, penyedia ADO.NET meminta informasi jenis data xml ini dikirim dalam pengodean biner dari server. Namun, jika Anda menggunakan FOR XML tanpa direktif TYPE, data XML kembali sebagai jenis string. Bagaimanapun, penyedia klien akan selalu dapat menangani salah satu bentuk XML. Perhatikan bahwa TINGKAT atas UNTUK XML tanpa direktif TYPE tidak dapat digunakan dengan kursor.
Contoh
Contoh berikut mengilustrasikan penggunaan direktif TYPE dengan kueri FOR XML.
Mengambil hasil kueri XML SEBAGAI jenis xml
Kueri berikut mengambil informasi kontak pelanggan dari Contacts
tabel. Karena direktif TYPE
ditentukan dalam FOR XML
, hasilnya dikembalikan sebagai jenis xml .
USE AdventureWorks2022;
Go
SELECT BusinessEntityID, FirstName, LastName
FROM Person.Person
ORDER BY BusinessEntityID
FOR XML AUTO, TYPE;
Ini adalah hasil parsial:
<Person.Person BusinessEntityID="1" FirstName="Ken" LastName="Sánchez"/>
<Person.Person BusinessEntityID="2" FirstName="Terri" LastName="Duffy"/>
...
Menetapkan hasil kueri XML ke variabel jenis xml
Dalam contoh berikut, hasil XML FOR ditetapkan ke variabel jenis xml , @x
. Kueri mengambil informasi kontak, seperti BusinessEntityID
, , FirstName
LastName
, dan nomor telepon tambahan, dari AdditionalContactInfo
kolom xmlTYPE
. FOR XML
Karena klausa TYPE
menentukan direktif, XML dikembalikan sebagai jenis xml dan ditetapkan ke variabel.
USE AdventureWorks2022;
GO
DECLARE @x xml;
SET @x = (
SELECT BusinessEntityID,
FirstName,
LastName,
AdditionalContactInfo.query('
declare namespace aci="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo";
declare namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes";
//act:telephoneNumber/act:number') as MorePhoneNumbers
FROM Person.Person
FOR XML AUTO, TYPE);
SELECT @x;
GO
Mengkueri hasil kueri FOR XML
Kueri FOR XML mengembalikan XML. Oleh karena itu, Anda dapat menerapkan metode jenis xml , seperti query()
dan value()
, ke hasil XML yang dikembalikan oleh kueri XML FOR.
Dalam kueri berikut, query()
metode tipe data xml digunakan untuk mengkueri FOR XML
hasil kueri. Untuk informasi selengkapnya, lihat Metode query() (Tipe Data xml).
USE AdventureWorks2022;
GO
SELECT (SELECT BusinessEntityID, FirstName, LastName, AdditionalContactInfo.query('
DECLARE namespace aci="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo";
DECLARE namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes";
//act:telephoneNumber/act:number
') AS PhoneNumbers
FROM Person.Person
FOR XML AUTO, TYPE).query('/Person.Person[1]');
Kueri dalam SELECT ... FOR XML
mengembalikan hasil jenis xml tempat luar SELECT
menerapkan query()
metode ke jenis xml . Perhatikan direktif TYPE
yang ditentukan.
Ini adalah hasilnya:
<Person.Person BusinessEntityID="1" FirstName="Ken" LastName="Sánchez">
<PhoneNumbers>
<act:number xmlns:act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes">111-111-1111</act:number>
<act:number xmlns:act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes">112-111-1111</act:number>
</PhoneNumbers>
</Person.Person>
Dalam kueri berikut, value()
metode tipe data xml digunakan untuk mengambil nilai dari hasil XML yang dikembalikan oleh SELECT...FOR XML
kueri. Untuk informasi selengkapnya, lihat Metode value() (Jenis Data xml).
USE AdventureWorks2022;
GO
DECLARE @FirstPhoneFromAdditionalContactInfo varchar(40);
SELECT @FirstPhoneFromAdditionalContactInfo =
( SELECT BusinessEntityID, FirstName, LastName, AdditionalContactInfo.query('
declare namespace aci="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo";
declare namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes";
//act:telephoneNumber/act:number
') AS PhoneNumbers
FROM Person.Person Contact
FOR XML AUTO, TYPE).value('
declare namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes";
/Contact[@BusinessEntityID="1"][1]/PhoneNumbers[1]/act:number[1]', 'varchar(40)'
);
SELECT @FirstPhoneFromAdditionalContactInfo;
Ekspresi jalur XQuery dalam value()
metode mengambil nomor telepon pertama dari kontak pelanggan yang BusinessEntityID
adalah 1
.
Catatan
Jika direktif TYPE tidak ditentukan, hasil kueri FOR XML dikembalikan sebagai jenis nvarchar(max).
Menggunakan hasil kueri FOR XML di INSERT, UPDATE, dan DELETE (Transact-SQL DML)
Contoh berikut menunjukkan bagaimana kueri XML FOR dapat digunakan dalam pernyataan Bahasa Manipulasi Data (DML). Dalam contoh, FOR XML
mengembalikan instans jenis xml . Pernyataan INSERT
menyisipkan XML ini ke dalam tabel.
CREATE TABLE T1(intCol int, XmlCol xml);
GO
INSERT INTO T1
VALUES(1, '<Root><ProductDescription ProductModelID="1" /></Root>');
GO
CREATE TABLE T2(XmlCol xml)
GO
INSERT INTO T2(XmlCol)
SELECT (SELECT XmlCol.query('/Root')
FROM T1
FOR XML AUTO,TYPE);
GO
Lihat juga
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