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)