[ 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

Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.