[ valevale @ 26.01.2008. 01:15 ] @
Napisao sam kod u transact SQL-u koji treba da kada se u tabelu "ispiti" ubaci zapis inkrementira broj polozenih ispita (br_polozeno) za tog studenta u tabeli "studenti".

CREATE TRIGGER Broj_polozenih_ispita
ON ispiti
FOR INSERT
AS
BEGIN
UPDATE studenti
SET br_polozeno = br_polozeno +1
FROM studenti
INNER JOIN ispiti
ON studenti.studentID = ispiti.studentID
END
GO

Problem je sto ovaj kod uvecava br_polozeno za sve kolone a ne samo za studenta za kog je unesen zapis.
Teorijski, to bi trebalo da bude reseno zadnjim redom (ON studenti.studentID = ispiti.studentID), ali imam osecaj da mi nesto u kodu fali.

Unapred hvala na odgovoru.
[ M E N E @ 26.01.2008. 07:48 ] @
U trigeru imas direktan pristup Tabelama INSERTED i DELETED, koje sadrze identicne kolone kao i tabela na koju vezes triger
Trebalo bi da komuniciras sa njima.
U tvom slucaju u tabeli insterted (identicna tabeli ISPITI) se nalazi tacno jedan novi red, jer si uneo jedan novi polozeni ispit. Iz te tabele cupas
StudentID

npr. ovo bi trebalo da radi:
CREATE TRIGGER Broj_polozenih_ispita
ON ispiti
FOR INSERT
AS
BEGIN
UPDATE studenti
SET br_polozeno = br_polozeno +1
WHERE studentID=(select top 1 studentID from INSERTED) --novi red, umesto tvog JOINa
END
GO

[ valevale @ 26.01.2008. 16:38 ] @
Hvala na odgovoru, problem resen.

Nadam se da ce ovo pomoci jos nekom.

Meni ce sigurno koristiti u buducnosti.
[ Zidar @ 28.01.2008. 21:37 ] @
Lepo je sto smo iz posta naucili kako se koriste inserted i deleted tabele u trigerima. Medjutim, u konkretnom primeru triger uopste nije potreban. Broj polozenih ispita za svakog studenta se u svakom momentu moze dobiti iz tabele Ispiti, jednostavnim kverijem

SELECT
Student
, COUNT(*)
FROM Ispiti
GROUP BY Student