使用列StudentId(varchar类型),Marks(Double)创建表数据。使用列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
问题是它没有显示旧标记
答案 0 :(得分:0)
我设法得到了你想要的东西。首先,您想要使用而不是触发器。 Oracle有一个前触发器,这是你理想的需要,但MSSQL没有这个功能,所以我们也必须手动传递更新......
以下是我使用的表格设置的代码,只是根据您的需要进行了更改。
CREATE TABLE A (ID INT IDENTITY PRIMARY KEY, SCORE INT)
CREATE TABLE B (ID INT FOREIGN KEY REFERENCES A(ID), SCORE INT, OLDSCORE INT, [date] DATETIME)
GO
CREATE TRIGGER marksss ON A INSTEAD OF UPDATE
AS
BEGIN
IF (SELECT A.SCORE FROM A INNER JOIN INSERTED I ON I.ID = A.ID) != (SELECT I.SCORE FROM INSERTED I)
BEGIN
INSERT INTO B(ID,SCORE,OLDSCORE,[date])
SELECT I.ID, I.SCORE, A.SCORE, GETDATE()
FROM INSERTED I
INNER JOIN A ON I.ID = A.ID
END
BEGIN
UPDATE A
SET SCORE = (SELECT I.SCORE FROM INSERTED I)
END
END