SQL Server. Trigerid kahe seotud tabelite põhjal




Loome database

create database triger2tabelid;
use triger2tabelid;
/*Loome AB ja kaks tabelid*/
Create table linnad(
linnID int identity(1,1) PRIMARY KEY,
linnanimi varchar(15),
rahvaarv int);

Create table logi(
id int identity(1,1) PRIMARY KEY,
aeg DATETIME,
toiming  varchar(100),
andmed text,
kasutaja varchar (200)
)
/*Maakond tabeli lisamine*/
CREATE TABLE maakond(
	maakondID int Primary KEY identity(1,1),
	maakond varchar(100) UNIQUE);
    
INSERT INTO maakond(maakond)
VALUES ('Harjumaa');
INSERT INTO maakond(maakond)
VALUES ('Pärnumaa');

SELECT * FROM maakond


/*seoste loomine linnad --> maakond*/
ALTER TABLE linnad ADD maakondID int;
ALTER TABLE linnad ADD CONSTRAINT fk_maakond
FOREIGN KEY (maakondID) References maakond(maakondID) 

Trigger ‘liisamine’ loomine

CREATE TRIGGER linnaLisamine
ON linnad
FOR INSERT
AS
INSERT INTO logi(kasutaja, aeg, toiming, andmed)
SELECT USER, GETDATE(), 'linn on lisatud',
CONCAT(l.linnanimi, ',', m.maakond)
FROM linnad l
INNER JOIN maakond m
ON m.maakondID=l.maakondID;

--kontrollimeseks
INSERT INTO linnad(linnanimi, rahvaarv, maakondID)
VALUES ('Tallinn', 436863,1);

SELECT * FROM linnad
SELECT *FROM logi

Triggeri ‘Kustutamine’ loomine

CREATE TRIGGER linnaKustutamine
ON linnad
FOR DELETE
AS
INSERT INTO logi(kasutaja, aeg, toiming, andmed)
SELECT USER, GETDATE(), 'linn on kustutatud',
CONCAT(deleted.linnanimi, ',', m.maakond)
FROM deleted
INNER JOIN maakond m
ON deleted.maakondID=m.maakondID;




--kontroll
DELETE FROM linnad 
WHERE linnID = 2;
SELECT * FROM linnad;
SELECT * FROM logi;

Triggeri ‘Uuendamine’ loomine

CREATE TRIGGER linnaUuendaimne
ON linnad
FOR UPDATE
AS
INSERT INTO logi(kasutaja, aeg, toiming, andmed)
SELECT USER, GETDATE(), 'linn on kustutatud',
CONCAT(
'vanad andmed - ', deleted.linnanimi, ',', m1.maakond,
'uuendatud andmed - ', inserted.linnanimi, ',', m2.maakond)
FROM deleted
INNER JOIN inserted  ON deleted.linnID=inserted.linnID
INNER JOIN maakond m1 ON deleted.maakondID=m1.maakondID
INNER JOIN maakond m2 ON inserted.maakondID=m2.maakondID

--kontroll
UPDATE linnad SET linnanimi = 'Tallinn-Väike', maakondID=2
WHERE linnID=3; 
SELECT * FROM linnad
SELECT * FROM logi