【发布时间】:2015-12-03 07:31:01
【问题描述】:
使用列 StudentId(varchar 类型)、Marks(双精度)创建表数据。使用列 StudentId(varchar 类型)、OldMarks (Double)、NewMarks、Date 创建表 data1。
在数据表上创建触发器。如果标记发生更改,则在 data1 表中为具有旧标记、新标记和当前日期的学生创建条目。
这是我尝试过的代码:
CREATE TRIGGER marksss ON [dbo].[data] after UPDATE
AS declare @studentid int;
declare @marks int;
declare @xyz int;
declare @newmarks int;
declare @oldmarks int;
select @studentid=i.student_id from inserted i;
--to fetch inserted values
select @marks=i.marks from inserted i;
begin if update(marks) --set @oldmarks=@mark set @newmarks=@marks
insert into data1(student_id,new_marks,old_marks,date)
values (@studentid,@newmarks,@oldmarks,getdate()enter code here);
end
go
问题是它不显示旧标记
【问题讨论】:
-
在 UPDATE AS 声明 @studentid int 之后创建触发器标记 [dbo].[data];声明@marks int;声明@xyz int;声明@newmarks int;声明@oldmarks int;从插入的 i 中选择 @studentid=i.student_id; -- 获取插入的值 select @marks=i.marks from inserted i;开始 if update(marks) --set @oldmarks=@mark set @newmarks=@marks 插入 data1(student_id,new_marks,old_marks,date) 值 (@studentid,@newmarks,@oldmarks,getdate()
enter code here) ;结束去 -
请标记使用的 dbms。 (看起来根本不像 ANSI SQL...)
-
对于旧值,您需要
deleted表 -
data1的用途是什么?您可以只在第一个表中包含一个时间戳列,这将是您的历史记录。只需使用人员 ID 选择并按时间戳排序即可获得最新的。
标签: sql-server tsql triggers