使用trigger将值更新到另一个表中

时间:2015-12-03 07:31:02

标签: sql-server tsql triggers

使用列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
问题是它没有显示旧标记

1 个答案:

答案 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