触发器为什么只能更新其中一条记录
FOR INSERT,UPDATE
AS
declare @id int,@a varchar(10) ,@b varchar(50),@type varchar(50)
select @id=id,@a=a,@b=b,@type=type from inserted
if update(a) or update(b)
begin
if @h_jq+@a_jq<>''
begin
if @type='1'
begin
update table set c=@a+@b where id=@id
end
else
begin
update table set c=@a-@b where id=@id
end
end
end
table触发器
字段a跟b是同时更新,记录有很多是相同的,只是type类型不一样,当type=1时就相加,type=0就相减
问题是当有两条相同记录的时候,只会更新一条记录,不知道什么?
例如:
id a b c type
-----------------------
1 8 6 1
2 8 6 1
...
当同时更新上面两条记录的时候得出的结果是
id a b c type
-----------------------
1 8 6 14 1
2 8 6 1
相关推荐
建立触发器-数据库vfvfds
建立触发器--数据库讲解,很好的。我们老师自己做的
存储过程、触发器和用户自定义函数实验2、触发器
(1)为study表创建一个UPDATE触发器,当更新成绩时,要求更新后的成绩不能低于原来的成绩。 CREATE TRIGGER UPDATE_SCORE ON study instead of update as declare @sno2 char(5),@cno2 char(4),@score1 smallint,@score2 smallint select @sno2
触发器练习答案(附有测试文档)
1、当向SC表插入数据时,修改(或添加)SC_NUMBER(包括学生学号和选课门数两列)表格中的数据。 2、当删除SC表中数据时,修改(或添加)SC_NUMBER中的数据。 3、当修改SC表中数据时,若修改的是学号,则对应修改SC_NUMBER表中的选课门数,否则打印“某某(学生姓名)的学生选课信息已经修改”信息。 1、修改STUDENT表数据时,限制不能修改学生的系别(不能修改CS系学生的系别)。 2、插入课程时,课程号以‘S’开头的课程的学分不能低于3分。 3、不能删除90分以上学生的选课信息。 插入Student表中数据时,CS系学生的年龄不能大于30岁。 当修改Student表中的年龄字段时,使其只能增加,不能减少。 删除Student表中的学生信息时,判断在SC表中该学生的平均成绩是否高于60,若高于60,则不能删除,否则允许删除,同时删除SC表该学生对应的选课信息。 在Student表中添加列:sum_Grade(总成绩),avg_grade(平均成绩)。 在SC表中作一触发器,当添加,删除或修改一行之后,将该学生在Student表中的总成绩和平均成绩相应改变。 插入或修改(修改课程号时)选课信息时,若该课程的选课人数已满,则不允许操作,并抛出相应的错误提示。
Sql Server触发器的使用
Sql Server为每个触发器都创建了两个专用表:Inserted表和Deleted表。这两个表由系统来维护,它们存在于内存中而不是数据库中。这两个表的结构总是与被该触发器作用的表的结构相同,触发器执行完成后,与该触发器相关的这两个表也被删除。 对表的操作 Inserted逻辑表 Deleted逻辑表 增加记录(insert) 存放增加的记录 无 删除记录(delete) 无 存放被删除的记录 修改记录(update) 存放更新后的记录 存放更新前的记录 三、for、after、instead of触发器 after:触发器在触发它们的语句完成后执行
SQL-Server2008触发器练习题
SQL-Server2008触发器练习题


