Imam tabelu NastavniPlanovi. U okviru tabele se nalaze dva obelezja "Obavezan" i "izborni" i odnose se na predmete. Posto jedna predmet u isto vreme ne moze da bude "obavezan" i "izborni", ja sam pokusao da kreiram INSTEAD OF okidac. Pre unosa u tabelu Nastavni Planovi, procedura treba da proveri da li je unesena vrednost za "obavezan" i "izborni" ista. Ako je ista, okidac ce da OPALI i da posalje poruku o gresci. Dakle, vrednosti za obelezja "obavezan" i "izborni" bi bile 1 ili 0. Vrednost 1 kazuje da je predmet obavezan ili izborni, a 0 da nije.
NastavniPlanovi (necu sve kolone navesti, samo one obavezne)
(
rbrNastavniPlanovi char(5) primary key not null,
rbrSavke char(15) Primary key not null,
nacinPolaganja char(45) not null,
ESPB INT,
obavezan bit,
izborni bit
)
Tabela ima kompozitni primarni kljuc, sastavljen od obelezja rbrNastavniPlanovi i rbrSavke
, stim da rbrNastavniPlanovi referencira primarni kljuc druge tabele.
Nad ovom tabelom je kreiran pogled imenovan sa "vw_Nastavni_Planovist".
Triger:
ALTER TRIGGER insteadof_nastavniPlanovist
ON vw_Nastavni_Planovist
INSTEAD OF INSERT
AS
BEGIN
DECLARE @izb bit, @obav bit
SELECT @obav=i.Obavezan, @izb=i.Izborni
FROM NastavniPlanoviSt st
JOIN inserted i ON i.RbrNastavnogPl=st.RbrNastavnogPl
IF (@obav!=@izb)
BEGIN
INSERT INTO nastavniPlanoviSt(RbrNastavnogPl, RbrStavke,SifPredmeta,NacinPolaganja,ESPB,Obavezan,Izborni)
SELECT i.RbrNastavnogPl,i.RbrStavke,i.SifPredmeta,i.NacinPolaganja,i.ESPB,@obav, @izb
FROM inserted i
JOIN NastavniPlanoviSt st ON st.RbrNastavnogPl=i.RbrNastavnogPl
END
ELSE
Raiserror ('Greska, uneli ste jednake verdnosti za kolone Obavezan i Izborni',10,1)
END
Pokusaj unosa vrednosti:
INSERT INTO vw_Nastavni_Planovist(
RbrNastavnogPl,
RbrStavke,
SifPredmeta,
NacinPolaganja,
ESPB,
Obavezan,
Izborni)
VALUSE
(59, 131, 'MDM050', 'UP', 2,0, 0)
Poruka: Uneli ste jednake verdnosti za kolone Obavezan i Izborni
(1 row(s) affected)
Drugi pokusaj unosa, sa promenom vrednosti za obelezje "Obavezan"
Pokusaj unosa vrednosti:
INSERT INTO vw_Nastavni_Planovist(
RbrNastavnogPl,
RbrStavke,
SifPredmeta,
NacinPolaganja,
ESPB,
Obavezan,
Izborni)
VALUSE
(59, 131, 'MDM050', 'UP', 2,1, 0)
Poruka o gresci:
Msg 2627, Level 14, State 1, Procedure insteadof_nastavniPlanovist, Line 14
Violation of PRIMARY KEY constraint 'PK_NastavniPlanoviSt'. Cannot insert duplicate key in object 'dbo.NastavniPlanoviSt'.
The statement has been terminated.
Naravno, nisam uneo dupli kljuc.