」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何僅從SQL Server更新觸發器中有效地檢索修改的字段?

如何僅從SQL Server更新觸發器中有效地檢索修改的字段?

發佈於2025-03-22
瀏覽:260

How to Efficiently Retrieve Only Modified Fields from an SQL Server Update Trigger?
僅獲取SQL Server Update trigger

介紹

在這種情況下,我們的目的是在SQL Server Database上執行更新trigger時僅包含修改的列值。此信息對於數據複製目的至關重要。

方法

選項1:利用Dynamic SQL(聲明方法)

選項2:不進行分散和加入(非確定方法)

,更有效的解決方案是對插入和已刪除的表格,創建一個具有唯一鍵鍵(contield contield field)的字段(five)(contrace)名稱(contive)(contecue),則可以更有效地解決此方法。 By joining these two tables, it is possible to identify any rows where FieldValue has changed, giving us the modified values.

Example

Consider the following code:

CREATE TRIGGER TriggerName ON dbo.Sample_Table FOR DELETE, INSERT, UPDATE AS 開始 設置nocount; - 刪除了未分明 使用DELETED_UNPVT為( 選擇ContactID,FieldName,FieldValue 從(選擇ContactID,Forename,姓氏,Extn,電子郵件,從已刪除的年齡)p undivot(inforname,foreName,姓氏,extn,email,age)in deleted_unpvt in fieldvalue ), - 插入未分明 inserted_unpvt as( 選擇ContactID,FieldName,FieldValue 從(選擇ContactID,Forename,姓氏,Extn,電子郵件,插入年齡)p undivot(in inserted_unpvt ) - 加入他們並確定更改 插入sample_table_changes(contactID,fieldname,fieldvaluewas,fieldvalueis) 選擇cocecce(d.contactid,i.contactid)contactid, cocece(d.fieldname,i.fieldname)fieldname, D.FieldValue作為FieldValuewas, I.FieldValue作為fieldValueis 來自DELETED_UNPVT d 完整的外部加入inserted_unpvt i 在d.contactid上 d.fieldvalue i.FieldValue 或(D.FieldValue不是零,而I.FieldValue為null) 或(d。fieldvalue為null,而i.fieldValue並非零); - 使用sample_table_changes的內容進行複制 結尾 GO

這種非決定性方法可以有效地處理更改,刪除和插入,而無需使用複雜的動態SQL或面對Bitfield算術雜項溢出問題。只要使用附加的GUID列用於識別,它也不會受到天然主鍵的更改的影響。
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3