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:
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!