Documente Academic
Documente Profesional
Documente Cultură
BDC 9
BDC 9
Raport
Lucrare de laborator Nr. 9
Chişinău 2017
Tema: Crearea și utilizarea declanșatoarelor
Scopul lucrării: Gestionarea și executarea declanșatoarelor de către SQL Server 2012.
Analiza declanșatoarelor de tip DML, DDL și LOGON, structura declanșatoarelor,
creare și executarea declanșatoarelor.
Executarea lucrării:
1. Să se modifice declanșatorul inregistrare_noua în așa fel încît în cazul
actualizării adresei furnizorului să apară mesajul de informare, care va afișa
numele furnizorului, adresa veche și adresa noua.
USE Calculatoare;
GO
IF OBJECT_ID ('inregistrare_noua', 'TR') IS NOT NULL
DROP TRIGGER inregistrare_noua;
GO
CREATE TRIGGER inregistrare_noua ON furnizor AFTER UPDATE
AS SET NOCOUNT ON
IF UPDATE(Adresa)
SELECT 'Adresa ' + RTRIM(UPPER(inserted.Nume)) + 'a fost schimbata de la ' +
RTRIM(UPPER(deleted.Adresa)) + ' la ' + RTRIM(UPPER(inserted.Adresa))
FROM inserted, deleted;
GO
UPDATE furnizor SET Adresa='Studentilo 7/1' WHERE Cod=1;
GO
USE Calculatoare;
GO
IF OBJECT_ID ('inserare_fara_erori', 'TR') IS NOT NULL
DROP TRIGGER inserare_fara_erori;
GO
CREATE TRIGGER inserare_fara_erori ON pc_uri INSTEAD OF INSERT
AS
DECLARE @Model varchar(4)
SET @Model = (SELECT inserted.Model FROM inserted)
IF (@Model NOT IN(SELECT Model FROM produse WHERE Tip='PC'))
BEGIN
INSERT INTO produse VALUES('W',@Model,'Laptop_uri')
END
GO
INSERT INTO pc_uri(Cod, Model, Viteza, Ram, Hd, Cd, Pret) VALUES
(12,1500,500,64,5,'12x',600);
3. Să se creeze un declanșator care ar interzice ștergerea modelelor produselor
producătorului „A”, produselor care costă mai mult de 300, precum și editarea
valorilor cîmpului Cod. Se va afișa un mesaj de avertizare în cazul tentativei de a
încălca constrîngerea.
USE Calculatoare;
GO
IF OBJECT_ID ('interzice_stergerea_A', 'TR') IS NOT NULL
DROP TRIGGER interzice_stergerea_A;
GO
CREATE TRIGGER interzice_stergerea_A ON pc_uri AFTER UPDATE, DELETE
AS
IF EXISTS (SELECT deleted.Model FROM deleted INNER JOIN produse ON
deleted.Model=produse.Model
WHERE produse.Producator='A' OR deleted.Pret>=300)
BEGIN
PRINT ('Tentativa esuata de a modifica un produs al producatorului "A"');
ROLLBACK
END
GO
DELETE FROM pc_uri WHERE Model='1232';
GO
USE Calculatoare;
GO
IF EXISTS (SELECT * FROM sys.triggers WHERE parent_class=0 AND name='Modificare')
DROP TRIGGER Modificare ON DATABASE;
GO
CREATE TRIGGER Modificare ON DATABASE
AFTER ALTER_TABLE
AS
DECLARE @cmd sysname
SET @cmd=EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand)[1]','nvarchar(max)');
IF (@cmd LIKE '%ALTER COLUMN%Pret%')
BEGIN
PRINT ('Este interzisa modificarea coloanei Model');
ROLLBACK
END
GO
ALTER TABLE pc_uri ALTER COLUMN Pret float;
GO
5. Să se creeze un declanșator DDL care ar interzice modificarea schemei bazei de
date în afara orelor de lucru.
USE Calculatoare;
GO
IF EXISTS (SELECT * FROM sys.triggers WHERE parent_class=0 AND name='Orar_lucru')
DROP TRIGGER Orar_lucru ON DATABASE;
GO
CREATE TRIGGER Orar_lucru ON DATABASE
AFTER ALTER_TABLE
AS
IF (DATEPART (HH,GETDATE())NOT BETWEEN 9 AND 17)
BEGIN
PRINT ('Modificarea Bazei de Date este interzisa in afara orelor de lucru');
ROLLBACK
END
GO
ALTER TABLE pc_uri DROP COLUMN Cod;
GO
USE Calculatoare;
GO
IF EXISTS (SELECT * FROM sys.triggers WHERE parent_class=0 AND name='Modificare_Coloane')
DROP TRIGGER Modificare_Coloane ON DATABASE;
GO
CREATE TRIGGER Modificare_Coloane ON DATABASE
AFTER ALTER_TABLE
AS
DECLARE @cmd varchar(max)
DECLARE @schema varchar(max)
DECLARE @cmd1 varchar(max)
SET @cmd=EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand)[1]','varchar(MAX)')
SET @schema=EVENTDATA().value('(/EVENT_INSTANCE/Objectname)[1]','varchar(MAX)')
SET @cmd1=REPLACE(@cmd,@schema,'****')
IF (@schema != 'laptop_uri')
BEGIN
SET @cmd1=REPLACE (@cmd,'****','laptop_uri')
EXECUTE(@cmd1)
END
IF (@schema != 'imprimante')
BEGIN
SET @cmd1=REPLACE (@cmd,'****','imprimante')
EXECUTE(@cmd1)
END
END
GO
Concluzie:
În urma realizării acestei lucrări de laborator am studiat gestionarea și executarea
declanșatoarelor de către SQL Server 2014. Am analizat declanșatoarele de tip DML,
DDL și LOGON, structura declanșatoarelor, crearea și executarea lor.