Sunteți pe pagina 1din 4

Triggere

1. Modificare salariu angajati.


CREATE TRIGGER MODIFICARE_SAL ON ANGAJATI
FOR UPDATE AS
IF EXISTS (SELECT * FROM DELETED, INSERTED

WHERE DELETED.CNP_Angajat = INSERTED.CNP_Angajat

AND DELETED.SALARIU>INSERTED.SALARIU)
BEGIN
RAISERROR ('NU SE POATE SUB MINIM', 18, 2)
ROLLBACK TRANSACTION
END

2. Stergere autoturisme cu anul fabricatiei in 2012.
CREATE TRIGGER [Stergere_Autovehicul] ON [Autovehicule] FOR DELETE AS
IF @@rowcount = 0 RETURN
IF EXISTS (SELECT Data_Fabricatiei FROM DELETED
WHERE Data_Fabricatiei = 2012)
BEGIN
RAISERROR ('NU SE POT STERGE DIN DEPARTAMENTUL 1', 18, 1)
ROLLBACK TRANSACTION
END
3.
Realizati un trigger care sa adauge in tabelul Arhiva_Angajati toti angajatii ce vor fi stersi
din tabelul Angajati. Tabelul Arhiva_Angajati are urmatoarele cmpuri: CNP_Angajat,
Nume_Angajat, DataPlecare. DataPlecare se va completa automat cu data la care a fost
sters angajatul

CREATE TRIGGER Arhivare on Angajati FOR DELETE AS
BEGIN
INSERT INTO Arhiva_Angajati (CNP_Angajat, nume_Angajat, DataPlecare)
SELECT CNP_Angajat, Nume_Angajat, GETDATE () as DataPlecare
FROM DELETED
END
4. Realizati un trigger care sa adauge in tabel toate autoturismele ce vor fi adaugate in
tabela Autoturisme.

CREATE TRIGGER [dbo].[ADAUGA_AUTOVEHICUL]
ON [dbo].AUTOTURISME
AFTER INSERT
AS
BEGIN
INSERT INTO AUTOTURISME (EXPLICATIE, DATAOPERATIE)
SELECT 'A FOST ADAUGAT Autoturismul' + Nr_Inmatriculare'+'Marca, GETDATE()
FROM INSERTED
END


Ob. Tip View:
1.Sa se afiseze toate autoturismele a caror marca incepe cu litera F.
SELECT Marca
FROM dbo.Autoturisme
WHERE (Marca LIKE N'F%')

2. S se creeze o tabela virtual care s conin toate informaiile clientilor care au folosit
rutile noastre fiind majori.
create view nume1 as select * from Clienti where Varsta_Client >='18.

3. Definirea unui View pentru calcularea numarului de angajati care a lucrat pe fiecare
ruta.

CREATE VIEW CalculView
AS
SELECT Executa.CNP_Angajat, Data,COUNT (Rute.CNP_Angajat) AS NrAng
FROM Executa INNER JOIN Rute ON Executa.CNP_Angajat = Rute.CNP_Angajat
GROUP BY Executa.CNP_Angajat, Executa.Data

4. Crearea unui View indexat pentru afisarea rutelor din Buzau:

CREATE VIEW Afisaj WITH SCHEMABINDING As
SELECT Cod_Ruta, Denumire_Ruta
FROM dbo.Rute
WHERE Oras_Plecare = Buzau

Apoi

CREATE UNIQUE CLUSTERED INDEX numeIDX ON
Afisaj (Oras_Plecare)
Proceduri

1 .Sa se realizeze o procedura stocata pentru a obtine lista salariatilor angajati pe
parcursul anului 2010.

CREATE PROC ListaAutovehicule2010 AS
SELECT Nr_Inmatriculare, Marca, Data_Fabricatiei FROM AUTOVEHICULE
WHERE Data_Fabricatie BETWEEN 1/1/2010 AND 12/31/2010

Observatie:
Lansarea n executie a procedurii stocate se poate realiza prin simpla specificare a
numelui acesteia, sau prin plasarea instructiunii EXEC naintea numelui
procedurii:

EXEC ListaAutovehicule2010

2.Sa se realizeze o procedura stocata pentru a afisa lista cu numele angajatilor, numerele
autovehiculelor si rutele pe o perioada de timp cuprinsa ntre doua date calendaristice
specificate prin parametri. Se va ordona lista alfabetic, dupa numele angajatilor.

CREATE PROC Listarute
@Data1 as datetime,
@Data2 as datetime
AS
SELECT Nume_Angajat, NR_Inmatriculare, Cod_Ruta
FROM Angajati INNER JOIN Executa
ON Angajati.CNP_Angajat=Executa.CNP_Angajati
WHERE Data BETWEEN @Data1 And @Data2
ORDER BY Nume_Angajat

Pentru a lansa n executie aceasta procedura trebuie atribuite valori parametrilor. Atribuirea de
valori se poate realiza prin enumerarea valorilor parametrilor in aceeasi ordine n care au fost
declarati n procedura sau prin specificarea exacta a numelui parametrului n fata fiecarei valori:

EXEC ListaRute 1/1/2012, 1/1/2013
3. Sa se creeze o procedura stocata pentru a afisa datele unui angajat al carui CNP este
specificat ca parametru. n cazul n care parametrul nu este specificat (ramne NULL)
se va afisa un mesaj de eroare.

CREATE PROCEDURE AfisezDateAngajat
@cnp char(13) = NULL
AS
IF @cnp IS NULL
BEGIN
SELECT 'NU ATI FURNIZAT UN CNP !'
RETURN
END
ELSE
SELECT * FROM ANGAJATI WHERE CNP_Angajat = @cnp
Execute [dbo].[AFISEAZA_Angajat] @cnp=2870104100159

Functii

1.Sa se afiseze numarul rutelor executate de fiecare angajat.

CREATE FUNCTION [dbo].[NRRUTE](@PIDANGAJAT AS NVARCHAR(50))
RETURNS TABLE
AS RETURN (SELECT COUNT(COD_RUTA) AS NRRUTE, IDANGAJAT

FROM EXECUTA
WHERE IDANGAJAT=@PIDANGAJAT
GROUP BY IDANGAJAT)

S-ar putea să vă placă și