覆盖触发器sql server中的列

时间:2014-03-19 17:44:20

标签: sql-server

我有两个表,例如Employee和一个名为EmployeeHistory的历史表。两个表都相同,区别在于EmployeeHistory表上的EmployeeHistoryId列。

CREATE TABLE Employee
(
EmployeeId INT IDENTITY PRIMARY KEY,
FirstName NVARCHAR(128),
LastName NVARCHAR(128),
ModifiedDate datetimeoffset
)

CREATE TABLE EmployeeHistory
(
EmployeeHistoryId INT IDENTITY PRIMARY KEY,
EmployeeId INT,
FirstName NVARCHAR(128),
LastName NVARCHAR(128),
ModifiedDate datetimeoffset
)

我有一个触发器,在任何更新,插入或删除后实际将记录从Employee复制到EmployeeHistory。

假设我们正在对Employee表进行un update,我们使用一个名为EmployeeUpdate的存储过程,在sp中我们强制使用ModifiedDate = SYSDATETIMEOFFSET(),因此历史表将与ModifiedDate同步记录。

如果有人在sp:

之外没有这样更新怎么办?
UPDATE Employee SET FirstName = 'John' where EmployeeId = 1

在这种情况下,我们没有触及ModifiedDate,所以在触发器中如果没有更新此列,我强制使用ModifiedDate = SYSDATETIMEOFFSET()在历史表中插入。 这样做的问题是原始表将具有与历史记录不同步的不同ModifiedDate。

我是否应该覆盖Employee表中的ModifiedDate,即使用户没有更新它?对于这种情况,最好的方法是什么?我知道每个人都应该使用sp但是......

0 个答案:

没有答案