[ idProof @ 07.07.2011. 14:09 ] @
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.