我有一个小问题,我正在尝试做什么。但我怀疑这是不可能的,只是想要一些其他的见解。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'字段中有空值没有在更新中指定。 是否有另一种方法可以确定它是否在更新中指定?