【发布时间】:2011-12-11 20:35:39
【问题描述】:
我已经尝试过了,但到目前为止还没有成功。由于我的查询知识有限,我想我最好在这里发布。
我有以下结构的学生表
create table students(
id int not null primary key identity,
sname varchar(25),
status varchar(25),
renew varchar(15),
enrollment datetime,
)
我有一些学生有一个 ID、学生姓名(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
请注意,这与我的问题非常接近。谢谢
【问题讨论】:
标签: sql sql-server-2005 join triggers