2009年3月31日 星期二

Sql Server Trigger: 當只有某幾欄被更新時

寫了一個 after trigger,如下

create trigger [dbo].[tr_afterUpdateTable] on [dbo].[MyTable]
after update
as
begin
	set nocount on
	//… my work
end

但是,當任何MyTable欄位的資料被更新時,這個 trigger 就會被觸發,就會跑很久。

不太妙。找到了 http://msdn.microsoft.com/zh-tw/library/ms186329.aspx ,但範例似乎不太對,因此修改了一下。如下,才能跑。

create trigger [dbo].[tr_afterUpdateTable] on [dbo].[MyTable]
create trigger [dbo].[tr_afterUpdateTable] on [dbo].[MyTable]
after update
as
begin
	set nocount on
	IF (SUBSTRING(COLUMNS_UPDATED(),1,1) & 6) > 0
	begin
		//當第2欄或第3欄被更新時
		// power(2, 2-1) + power(2, 3-1) = 6
		//… my work
	end
end

MSDN 的範例還是會有錯誤的時候哦!

沒有留言:

Share with Facebook