Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menjana XML Lajur Jadual Dikemaskini dalam Pelayan SQL dengan Cekap?

Bagaimana untuk Menjana XML Lajur Jadual Dikemaskini dalam Pelayan SQL dengan Cekap?

DDD
DDDasal
2024-12-23 00:16:18193semak imbas

How to Generate XML of Updated Table Columns in SQL Server Efficiently?

Menjana XML Lajur Jadual Dikemas Kini dalam Pelayan SQL

Fungsi COLUMNS_UPDATED Pelayan SQL memberikan cerapan tentang lajur yang diubah suai semasa kemas kini jadual. Walau bagaimanapun, untuk senario yang hanya memerlukan nilai lajur yang dikemas kini dalam format XML, kami mempersembahkan pendekatan yang berbeza.

Rutin Automasi untuk Mengenalpasti Lajur yang Diubah Suai

Daripada menentukan setiap satu secara manual lajur dalam pernyataan SELECT, rutin automatik boleh menjana senarai lajur berdasarkan struktur jadual secara dinamik. Ini memudahkan pembangunan pencetus dan memastikan ia menyesuaikan diri dengan pengubahsuaian jadual masa hadapan. Sebagai contoh, dalam pencetus untuk jadual DBCustomers:

CREATE TRIGGER DBCustomers_Insert
ON DBCustomers
AFTER UPDATE
AS
BEGIN
    DECLARE @sql AS NVARCHAR(1024);
    SET @sql = 'SELECT ';

    -- Get the updated columns.
    SELECT TOP (1) COLUMN_NAME
    INTO #ModifiedColumns
    FROM INFORMATION_SCHEMA.COLUMNS_UPDATED()
    ORDER BY COLUMN_NAME;

    WITH RECURSIVE ModifiedColumnsCTE AS (
        SELECT *, ROW_NUMBER() OVER (ORDER BY COLUMN_NAME) AS RowNum, COUNT(*) OVER () AS TotalRows
        FROM #ModifiedColumns
    )
    SELECT COLUMN_NAME INTO #temp
    FROM ModifiedColumnsCTE
    WHERE RowNum < TotalRows
    UNION ALL
    SELECT ',' + COLUMN_NAME
    FROM ModifiedColumnsCTE
    WHERE RowNum = TotalRows;

    -- Append the updated columns to the SELECT statement.
    SET @sql = @sql + STUFF((
        SELECT TOP (1) ColumnName
        FROM #temp
        FOR XML PATH('')
    ), 1, 2, '');

    SET @sql = @sql + ' FROM inserted FOR XML RAW';

    DECLARE @x AS XML;
    SET @x = CAST(EXEC(@sql) AS XML);

    -- Use the @x XML variable for replication purposes.
END

Penyelesaian Ganti Menggunakan NyahPivot

Pendekatan alternatif memanfaatkan teknik unpivoting, mengelakkan COLUMNS_UPDATED sama sekali:

  • Nyahpangsi kedua-dua yang dimasukkan dan jadual yang dipadamkan, menghasilkan tiga lajur: kunci unik, nilai lajur yang diubah suai dan nama lajur.
  • Sertai jadual tidak berpivot dan tapis untuk perubahan nilai lajur, pemadaman dan sisipan.
  • Simpan hasil carian dalam jadual berasingan untuk tujuan pengauditan.

Kaedah ini menghapuskan keperluan untuk SQL dinamik dan memastikan output yang konsisten pemformatan, tanpa mengira struktur jadual. Ia amat berfaedah untuk jadual dengan bilangan lajur yang banyak atau penambahan lajur biasa.

Pertimbangan

Apabila berurusan dengan jadual yang mempunyai kunci utama semula jadi yang boleh berubah, menggunakan lajur tambahan yang diisi dengan GUID melalui fungsi NEWID() adalah disyorkan. Ini memastikan proses unpivoting kekal sah untuk tujuan jejak audit.

Atas ialah kandungan terperinci Bagaimana untuk Menjana XML Lajur Jadual Dikemaskini dalam Pelayan SQL dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn