Bagikan melalui


KETIK direktif dalam kueri XML UNTUK

Berlaku untuk: SQL ServerAzure 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, , FirstNameLastName, 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