我有以下要求:
我有一个包含 1 个唯一的自动增量 Int ID 和数据列的表。我需要以下内容:每次将一行插入该表时,表右端的一列必须包含该插入的完整日期时间。此外,如果更新了一行,我需要保存该行插入表的完整日期时间的列,以更新该行以保存该行的更新时间。
现在,显而易见且非常直接的方法是:创建表:
create table My_Test_Table
(my_id int identity not null,
my_data nvarchar(max));
你改变你的表添加日期时间列和它的默认约束:
ALTER TABLE My_Test_Table
ADD [timestamp] datetime;
ALTER TABLE My_Test_Table
ADD CONSTRAINT DF_My_Test_Table_timestamp DEFAULT GETDATE() FOR [timestamp];
然后你为更新做一个很好的触发器,就像这样:
CREATE TRIGGER DML_Trigger_update_My_Test_Table
ON My_Test_Table
FOR UPDATE
AS
IF @@ROWCOUNT <> 0
BEGIN
IF EXISTS (SELECT * FROM INSERTED) AND EXISTS (SELECT * FROM DELETED)
BEGIN
UPDATE My_Test_Table
SET [timestamp] = GETDATE()
FROM INSERTED
WHERE My_Test_Table.my_id = INSERTED.my_id;
END
END
现在棘手的部分是:出于超出此处范围的原因,我想像上面那样实现这个确切的东西,但没有触发器!可能吗?我不想使用 SQL 类型的时间戳或行版本,这对我不起作用,我需要将日期、时间精确到毫秒才能清楚地存储在该列中。任何想法将不胜感激。