具体情况是改变学生的班级,相应的班级就加减人数。但是我把专业(maj)和班级编号(clas)绑定在一起做了class表的主码,比如机械1201和光材1201是不同的班,但是我只把机械改成光材,不改变编号的时候班级人数就不能按照要求改了。。源代码是这样大家意会一下就好。。student 表里专业是smaj,班级编号是sclass.
create trigger upd_num on student
for update
as
if update(sclass) begin
update class set stnum=stnum-1
from deleted
where (clas = deleted.sclass and maj = deleted.smaj)
or (clas = deleted.sclass and not exists(select smaj from deleted) )
or (maj = deleted.smaj and not exists(select sclass from deleted) )
update class set stnum=stnum+1
from inserted
where (clas = inserted.sclass and maj = inserted.smaj)
or (clas = inserted.sclass and not exists(select smaj from inserted) )
or (maj = inserted.smaj and not exists(select sclass from inserted) )
end
GO
还有触发器代码我是照搬书上然后改的,不知道as在这里干什么,go也不知道要不要,可以解释一下么?
------解决方案--------------------
这是触发器的语法,你可以看联机丛书上的例子:
CREATE TRIGGER [ schema_name . ]trigger_name
ON { table
------解决方案--------------------
view }
[ WITH <dml_trigger_option> [ ,...n ] ]
{ FOR
------解决方案--------------------
AFTER
------解决方案--------------------
INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS { sql_statement [ ; ] [ ,...n ]
------解决方案--------------------
EXTERNAL NAME <method specifier [ ; ] > }
<dml_trigger_option> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]
<method_specifier> ::=
assembly_name.class_name.method_name
Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE, or UPDATE STATISTICS statement (DDL Trigger)
CREATE TRIGGER trigger_name
ON { ALL SERVER
------解决方案--------------------
DATABASE }
[ WITH <ddl_trigger_option> [ ,...n ] ]
{ FOR
------解决方案--------------------
AFTER } { event_type
------解决方案--------------------
event_group } [ ,...n ]
AS { sql_statement [ ; ] [ ,...n ]
------解决方案--------------------
EXTERNAL NAME < method specifier > [ ; ] }
<ddl_trigger_option> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]
<method_specifier> ::=
assembly_name.class_name.method_name
Trigger on a LOGON event (Logon Trigger)
CREATE TRIGGER trigger_name
ON ALL SERVER
[ WITH <logon_trigger_option> [ ,...n ] ]
{ FOR
------解决方案--------------------
AFTER } LOGON
AS { sql_statement [ ; ] [ ,...n ]
------解决方案--------------------
EXTERNAL NAME < method specifier > [ ; ] }
<logon_trigger_option> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]
<method_specifier> ::=
assembly_name.class_name.method_name