Contoh: Tentukan direktif HIDE

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Contoh ini mengilustrasikan penggunaan direktif HIDE . Direktif ini berguna saat Anda ingin kueri mengembalikan atribut untuk mengurutkan baris dalam tabel universal yang dikembalikan oleh kueri, tetapi Anda tidak ingin atribut tersebut dalam dokumen XML yang dihasilkan akhir.

Kueri ini membuat XML ini:

<ProductModel ProdModelID="19" Name="Mountain-100">
  <Summary>
    <SummaryDescription>
           <Summary> element from XML stored in CatalogDescription column
    </SummaryDescription>
  </Summary>
</ProductModel>

Kueri ini menghasilkan XML yang Anda inginkan. Kueri mengidentifikasi dua grup kolom yang memiliki 1 dan 2 sebagai nilai Tag dalam nama kolom.

Kueri ini menggunakan Metode kueri() (Tipe Data xml) dari tipe data xml untuk mengkueri kolom CatalogDescription jenis xml untuk mengambil deskripsi ringkasan. Kueri juga menggunakan metode value() (Tipe Data xml) dari jenis data xml untuk mengambil nilai ProductModelID dari kolom CatalogDescription. Nilai ini tidak diperlukan dalam XML yang dihasilkan, tetapi diperlukan untuk mengurutkan himpunan baris yang dihasilkan. Oleh karena itu, nama kolom, [Summary!2!ProductModelID!HIDE], menyertakan direktif HIDE . Jika kolom ini tidak disertakan dalam pernyataan SELECT, Anda harus mengurutkan kumpulan baris berdasarkan [ProductModel!1!ProdModelID] dan itu adalah jenis xml dan Anda tidak dapat menggunakan kolom jenis xml[Summary!2!SummaryDescription] di ORDER BY. Oleh karena itu, kolom tambahan [Summary!2!ProductModelID!HIDE] ditambahkan dan kemudian ditentukan dalam klausa ORDER BY.

USE AdventureWorks2022;
GO
SELECT  1 as Tag,
        0 as Parent,
        ProductModelID     as [ProductModel!1!ProdModelID],
        Name               as [ProductModel!1!Name],
        NULL               as [Summary!2!ProductModelID!hide],
        NULL               as [Summary!2!SummaryDescription]
FROM    Production.ProductModel
WHERE   CatalogDescription is not null
UNION ALL
SELECT  2 as Tag,
        1 as Parent,
        ProductModelID,
        Name,
        CatalogDescription.value('
         declare namespace PD="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
       (/PD:ProductDescription/@ProductModelID)[1]', 'int'),
        CatalogDescription.query('
         declare namespace pd="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
         /pd:ProductDescription/pd:Summary')
FROM    Production.ProductModel
WHERE   CatalogDescription is not null
ORDER BY [ProductModel!1!ProdModelID],[Summary!2!ProductModelID!hide]
FOR XML EXPLICIT;
GO

Ini adalah hasilnya:

<ProductModel ProdModelID="19" Name="Mountain-100">
  <Summary>
    <SummaryDescription>
      <pd:Summary xmlns:pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription" xmlns="">
        <p1:p xmlns:p1="http://www.w3.org/1999/xhtml">Our top-of-the-line competition mountain bike. Performance-enhancing options include the innovative HL Frame, super-smooth front suspension, and traction for all terrain. </p1:p>
      </pd:Summary>
    </SummaryDescription>
  </Summary>
</ProductModel>

Baca juga