如何使用T-SQL中的更新后触发器更新日期列 DateMod 到今天更新(未插入)列 CustomerProductID 的日期?
一些背景信息:表已包含产品列表(键列项目代码),一旦收到CustomerProductID,它就会将该特定行(产品)的列从NULL更改为整数值。此更新是将DateMod列更新为行(产品)的今天日期的触发器。 我正在使用SSMS 2008并使用以下代码更改整个日期列,而不是更新行的特定日期字段:
CREATE TRIGGER trigger_name
ON Table1
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF UPDATE (CustomerProductID) BEGIN
Update Table1
SET DateMod=GETDATE()
END
END
我已经阅读了一些使用old.value和new.value或使用where where(从插入/更新中选择)的解决方案,但是它是如何工作的?如果两种方法都有效,那么在这种情况下哪种方法最有用? 非常感谢!
答案 0 :(得分:1)
我更喜欢将此作为before update
触发器(逻辑上的事情......在更新触发器之后进行更新建议无限循环,并且在某些数据库中不允许)。但是SQL Server并不支持它。
在任何情况下,正确的语法是使用inserted
连接回原始表:
CREATE TRIGGER trigger_name
ON Table1
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF UPDATE(CustomerProductID) BEGIN
Update t1
SET DateMod = GETDATE()
FROM Table1 t1 join
Inserted i
ON Table1.PrimaryKeyColumn = i.PrimaryKeyColumn
END
END
更改代码,以便PrimaryKeyColumn
是正确的主键列。