Hej
Sitter å pluggar för en tenta på lördag och har hittat en uppgift på en typtenta som jag inte kan bli klok på, och ansvariglärare än inte anträffbar innan tentan (yihaa)
DDL-sattserna ser ut som nedan
create table student
(
spnr varchar(5) not null,
sname varchar(10),
sadress varchar(10),
stel varchar(10),
constraint STUDENT_PK PRIMARY KEY(spnr)
)
create table kurs
(
kkod varchar(5) not null,
kname varchar(10),
kadress varchar(10),
poang integer,
constraint KURS_PK PRIMARY KEY(kkod)
)
create table laser
(
id integer not null,
spnr varchar(5) not null,
kkod varchar(5) not null,
betyg integer,
constraint LASER_PK PRIMARY KEY(id),
constraint LASER_SPNR_FK FOREIGN KEY(spnr) REFERENCES student(spnr),
constraint LASER_KKOD_FK FOREIGN KEY(kkod) REFERENCES kurs(kkod))
create trigger t1 on kurs
for insert, update, delete
as
select i.kkod from inserted i, deleted d where i.kkod = d.kkod
commit
Sen får vi frågan, 1. Vad resulterar följande transaktion i för meddelande, server-outuput och eventuella felmeddelanden, finns det några fel i denna transaktion
begin transaction
delete kurs
insert into kurs values('K1','data1','lund','5')
update kurs set kname = 'data'
select @@trancount
select @@trancount
select * from kurs
För det första så är den felaktig för att det saknas ett commit i transaktionen, men det finns ju en i triggern spelar det någon roll? Sen när vi kör uppgiften får vi ingenting av server-output, det enda som händer är att det raderas alla ur Kurs tabellen.
Borde det inte ske följande
begin transaction
delete kurs
--Här efter gör triggern en commit
--Ny transaktion skapas automatiskt då det
--gör det vid en insert om man inte anger att en ska
--skapas och värdet kommer in
insert into kurs values('K1','data1','lund','5')
--Ny transaktion skapas automatiskt då det gör det
--vid en update om man inte anger att en ska skapas och värdet uppdateras
update kurs set kname = 'data'
--Skriver ut 0 då alla transaktioner är commitade, den
--första begin transaction commitas ju i triggern
select @@trancount
select @@trancount
--Hämtar alla ifrån kurs, i detta fall endast den som
--sattes in med inserten ovan
select * from kurs
Är det fel på min sql-server eller vad har jag inte förstått, för jag kan inte se varför inte inserten eller updaten körs