我不知道找到的解决方案是否可行。
问题陈述::数据库中有一个名为产品的表,我需要跟踪价格已更新/修改的产品,但我不想使用modified_date列,因为它不存在。
一个高级资源要求我在SQL Server DB中运行查询,只要该表被修改,该记录就会被复制到您的log / track表中,因此我可以从那里找到。
答案 0 :(得分:0)
尝试在UPDATE
之后使用触发器:
CREATE TRIGGER ModDate
ON YourTable
AFTER UPDATE
AS
BEGIN
INSERT INTO dbo.LogTable(DateModified)
VALUES (GETDATE());
PRINT 'New Block Date Added';
END
更新:
当触发器起作用时,引擎盖下有两个表:
这些虚拟表中的数据取决于您正在执行的操作:
更新操作:更新记录时,首先,旧记录将被放入“ DELETED”虚拟表中,而新近更新的记录将被“ INSERTED”虚拟表保留。
这意味着您可以从“ DELETED”中获取旧值,并可以通过“ INSERTED”虚拟表获取当前正在更新的值。您可以像这样查询它们:
-- To get the old record value
SELECT * FROM DELETED
-- To get the updated value
SELECT * FROM INSERTED
删除操作:尝试删除任何特定记录时,已删除的记录将被插入“ DELETED”虚拟表中。
所以您的触发器应如下所示:
CREATE TRIGGER ModDate
ON YourTable
AFTER UPDATE
AS
BEGIN
INSERT INTO dbo.LogTable(DateModified, IdUpdatedRow)
SELECT GETDATE(), INSERTED.YourIdOfUpdatedRow;
PRINT 'New Block Date Added';
END
答案 1 :(得分:0)
正如StepUp所提到的,执行此操作的经典方法是使用AFTER TRIGGER。示例解决方案将仅通过UPDATE触发。在您的情况下,您还想添加INSERT和DELETE的触发器,或者调整该触发器以处理这3种事件类型。
请注意,使用触发器会影响@@ ROWCOUNT,因此可能会影响功能。
因此,我认为SQL Server的最新版本具有替代机制。