Chapter 11 Trigerat
Trigerat – “Sensoret”
Cfare jane triggerat
Si funksionon nje INSERT trigger (sensor per Insert)
Si funksionon nje DELETE trigger (sensor per delete)
Si funksionon nje update trigger (sensor per modifikim)
Cfare jane triggerat
Procedura qe ekzektuohen automatikisht nese ndodh nje kompande insert,update ose delete ne nje tabele
Triggerat dhe komanda qe i aktivizoi ato jane pjese e e te njejtit transaksion
Si punon nje Insert trigger
Kur aktivizoeht nje INSERT trigger, rreshtat e reja shtohen edhe ne tabelen INSERTED
Tabela inserted eshte nje tabele llogjike qe mban nje kopje et rreshtave te saposhtuar.
Triggeri mund te lexoje te dhenat ne tabelen inserted per te vendosur cfare duhet te beje
Si krijohet nje INSERT trigger
CREATE TRIGGER NewCats on Categories
AFTER INSERT AS
BEGIN
select CategoryId,CategoryName from inserted
END
Si funksionon nje DELETE trigger
Rreshtat e fshire vendosen ne nje tabele me emrin Deleted
Tabela Deleted eshte nje tabele llogjike qe permban rreshtat e sapofshire
Si krijohet nje DELETE Trigger
CREATE TRIGGER MosFshiKat on Categories
AFTER DELETE AS
BEGIN
ROLLBACK
END
Trigeri i mesiperm nuk lejon fshirjen ne tabelen categories
Si funksionon nje UPDATE trigger
Sensori per modifikim bazohet ne te dy tabelat llogjike:
Tabela DELETED ruan versionin e rreshtave te modifikuar para modifkimit
Tabela INSERTED ruan versionin e rreshtave te modifikuar pas modifkimit
Si krijohet nje UPDATE Trigger
CREATE TRIGGER AfishoKatMod on Categories
AFTER UPDATE AS
BEGIN
SELECT CategoryId, CategoryName from Categories
END
Ushtrim
Ndertoni nje trigger i cili nuk lejon modifikimin e cmimit te produktit ( tabela products)
Zgjidhje
-- supozojme se modifikohet vetem nje rresht
create trigger fixed_price ON Products
AFTER UPDATE AS
BEGIN
Declare @oldprice as float
Declare @newprice as float
select @oldprice=unitprice from deleted
select @newprice=unitprice from inserted
if(@oldprice<>@newprice)
begin
rollback
print 'nuk mund te modifikohet cmimi'
end
END
--supozojme se modofikohen disa rreshta
create trigger fixed_price ON Products
AFTER UPDATE AS
BEGIN
if exists
(
select * from inserted i join deleted d
on i.product_id=d.product_id
where i.unitprice<>d.unitprice
)
begin
rollback
print 'nuk mund te modifikohet cmimi'
end
END
Detyre Shtepie
Rikujtese ushtrimi me audit kategorise
Ndertoni nje triger i cili ruan punonjit e fshire:
current_user kthen user korrent ndersa getdate() kohen korrente