create table student
(spnr VARCHAR(5) PRIMARY KEY,
sname VARCHAR(10),
saddress VARCHAR(10),
stel VARCHAR(10) )
create table course
(ccode VARCHAR(5) PRIMARY KEY,
cname VARCHAR(10),
caddress VARCHAR(10),
points int )
create table studies
(id int PRIMARY KEY,
spnr VARCHAR(5) NOT NULL,
ccode VARCHAR(5) NOT NULL,
result int,
CONSTRAINT STUDIES_SPNR_FK FOREIGN KEY(spnr) REFERENCES student(spnr),
CONSTRAINT STUDIES_CCODE_FK FOREIGN KEY(ccode) REFERENCES course(ccode) )
create trigger t1 on course
after update,insert
as
print 'inside trigger';
select i.ccode from inserted i, deleted d
where i. ccode = d. ccode
create procedure what (@tableName varchar(10))
as
begin
declare @name varchar(20);
declare c cursor for
select column_name
from information_schema.columns
where table_name = @tableName;
open c;
fetch c into @name;
while @@fetch_status = 0 begin
print 'name:' + @name;
fetch c into @name;
end
close c;
deallocate c;
end;
运行时:
begin transaction
insert into course values('K1','data1','lund',5);
update course
set cname ='informatik';
commit
显示以下消息:
inside trigger
(0 row(s) affected)
(1 row(s) affected)
inside trigger
(1 row(s) affected)
(1 row(s) affected)
最后,为什么1行受影响最终显示2次?当它只在一个位置将cname更改为“informatic”时?
答案 0 :(得分:1)
一个“1行受影响”来自UPDATE,一个来自SELECT中的触发器。尝试从触发器中删除SELECT,您应该只看到一个“1行受影响”。