我有一個小問題,我正在嘗試做什麼。但我懷疑這是不可能的,只是想要一些其他的見解。TSQL-觸發器,而不是更新列表中未包含UPDATE列
我有一個表,其中包含六列。其中兩個與錄製桌面更新「UpdateBy」和「UpdateDate」有關。當某人在表上應用更新時,更新日期被設置爲系統時間,無論是否有人試圖設置時間和日期(這裏沒有問題),但是當涉及到'UpdatedBy'時,我有一個問題。我試圖在觸發器內使用'插入'表,但執行語句時。
update PoolGroups
set
PoolDescription = 'test 1 description'
where
PoolName = 'test 2'
不包含的「UpdatedBy」列「Inserted.UpdatedBy」字段包含的內容已經在不是在使用「更新」語句通過表中的任何條目。但是'Inserted.PoolDescription'具有改變的文本而非原文。 這裏是觸發器。
CREATE TRIGGER TR_PoolGroups_Update
ON PoolGroups
instead of UPDATE
AS
BEGIN
UPDATE PoolGroups
SET
PoolDescription = i.PoolDescription
,UpdatedBy = coalesce(i.updatedby , (select SUSER_NAME()))
,UpdatedDate = getdate()
FROM
PoolGroups pg
INNER JOIN Inserted i
ON i.PoolName = pg.PoolName
END
GO
已經在表PoolGroups中的數據。
PoolName PoolDescription UpdatedBy UpdatedDate
test 2 test description test1 2013-06-22 14:39:55.930
數據插入表中的數據在插入運行時的觸發器中。
PoolName PoolDescription UpdatedBy UpdatedDate
test 2 test 1 description test1 2013-06-22 14:39:55.930
我希望剛好趕上當更新聲明沒有包含「UpdatedBy」字段,然後在用戶名登錄替換此。我的問題是,我不能解決如何檢測該字段是否包含在針對此表運行的更新語句中,因爲我預料插入的表在'UpdatedBy'字段中有空值沒有在更新中指定。 是否有另一種方法可以確定它是否在更新中指定?