我已經嘗試過,但目前爲止尚未成功。由於我在查詢方面的知識有限,我認爲我會在這裏更好地發佈它。找到原始記錄並只更改不是插入的記錄
我有個同學的表結構如下
create table students(
id int not null primary key identity,
sname varchar(25),
status varchar(25),
renew varchar(15),
enrollment datetime,
)
我有很多學生誰擁有一個ID,studentName(SNAME),狀態(「激活」或「未激活狀態」),更新( '不'爲新生,是'爲新生')和入學日期。
insert into students values('jay','active','no','2010-01-01')
insert into students values('Phil','active','no','2010-01-01')
insert into students values('Cru','active','no','2010-01-01')
insert into students values('slow','active','no','2010-01-01')
insert into students values('true','active','no','2010-01-01')
insert into students values('false','active','no','2010-01-01')
現在我有一個INSERT觸發器,假設當一個學生被更新時,將一個老學生停用。因此,如果我插入以下設置爲「是」的續訂,它應該使已有的記錄「非活動」。
insert into students values('false','active','yes','2011-01-01')
我寫了這個INSERT觸發器,它的工作原理,但它沒有激活舊的和新插入的記錄。我只想讓原始記錄失效。也不是說只有註冊日期和新域是不同的,其餘的原始和插入記錄是相同的。如何解決這個問題?這是我的觸發器
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[tr_renew_student]
ON [dbo].students
-- WITH ENCRYPTION
FOR INSERT
-- WITH APPEND
-- NOT FOR REPLICATION
AS
-- insert sql here
if exists(select * from inserted where Renew = 'yes')
BEGIN
UPDATE students
SET status = 'Inactive'
FROM Inserted i
INNER JOIN students T2
ON i.sname = T2.sname
END
請注意,這是近似於我的問題。謝謝
我認爲最後插入的記錄沒有提供解決方案。「插入」表具有我需要與原始表連接的所有內容,並查找需要修改的實際記錄。 –
我通常不會使用觸發器,因此Inserted會在早些時候放棄我的想法。查看我更新的答案,以獲取更多關於我想要的方法的詳細信息。 – OCary