
T-SQL skrypt projekt [SQL]
Opublikowano: 2009-07-29 , wyświetlono: 18281
Skrypt T-SQLa tworzący obiekty w bazie danych i wykonujący kilka operacji testowych.
/*
Projekt
*/
CREATE DATABASE Projekty
GO
USE Projekty
GO
/*
Tworzenie tabel w bazie danych
*/
CREATE TABLE Projekt
(
id INT IDENTITY (1, 1) NOT NULL PRIMARY KEY,
kod VARCHAR(20),
nazwa VARCHAR(200),
status INT
)
CREATE TABLE Zadanie
(
id INT IDENTITY (1, 1) NOT NULL PRIMARY KEY,
idProjekt INT,
idPracownik INT,
nazwa VARCHAR(200),
priorytet INT,
status INT
)
CREATE TABLE Pracownik
(
id INT IDENTITY (1, 1) NOT NULL PRIMARY KEY,
imie VARCHAR(40),
nazwisko VARCHAR(40),
stanowisko VARCHAR(80)
)
CREATE TABLE StatusProjektu
(
id INT,
nazwa VARCHAR(50)
)
CREATE TABLE PriorytetZadania
(
id INT,
nazwa VARCHAR(50)
)
GO
/*
Uzupelnienie tabel danymi
*/
INSERT INTO Pracownik (imie, nazwisko, stanowisko) VALUES ('Jan', 'Kowalski', 'specjalista');
INSERT INTO Pracownik (imie, nazwisko, stanowisko) VALUES ('Ewa', 'Nowak', 'referentka');
GO
INSERT INTO StatusProjektu VALUES (1, 'rozpoczety')
INSERT INTO StatusProjektu VALUES (2, 'realizowany')
INSERT INTO StatusProjektu VALUES (3, 'zakonczony')
GO
INSERT INTO PriorytetZadania VALUES (1, 'wysoki')
INSERT INTO PriorytetZadania VALUES (2, 'sredni')
INSERT INTO PriorytetZadania VALUES (3, 'niski')
GO
INSERT INTO Projekt (kod, nazwa, status) VALUES ('BAZA', 'projekt bazy danych', 1)
INSERT INTO Projekt (kod, nazwa, status) VALUES ('SQL', 'skrypt sql', 2)
GO
/*
Procedura dodawania zadania do projektu
*/
CREATE PROCEDURE DodajZadanie
@kodProjektu VARCHAR(20),
@idPracownika INT,
@nazwaZadania VARCHAR(200),
@priorytetZadania INT
AS
BEGIN
DECLARE @idProjektu INT
-- wyszukanie id projektu
SELECT @idProjektu = id FROM Projekt WHERE kod = @kodProjektu
IF ((@@ERROR = 0) AND ( @@ROWCOUNT > 0))
BEGIN
-- dodanie zadania status = rozpoczety
INSERT INTO Zadanie (idProjekt, idPracownik, nazwa, priorytet)
VALUES (@idProjektu, @idPracownika, @nazwaZadania, @priorytetZadania)
END
ELSE
BEGIN
RETURN(0)
END
END
GO
/*
Procedura zmiany statusu projektu o podanym kodzie
*/
CREATE PROCEDURE ZmienStatusProjektu
@kodProjektu VARCHAR(20),
@nowyStatus INT
AS
BEGIN
DECLARE @idProjektu INT
-- wyszukanie id projektu
SELECT @idProjektu = id FROM Projekt WHERE kod = @kodProjektu
IF ((@@ERROR = 0) AND ( @@ROWCOUNT > 0))
BEGIN
UPDATE Projekt SET status = @nowyStatus WHERE id = @idProjektu
END
ELSE
BEGIN
RETURN(0)
END
END
GO
/*
Procedura usuwanie projektu o podanym kodzie (transakcja)
*/
CREATE PROCEDURE UsunProjekt
@kodProjektu VARCHAR(20)
AS
BEGIN
DECLARE @idProjektu INT
-- wyszukanie id projektu
SELECT @idProjektu = id FROM Projekt WHERE kod = @kodProjektu
IF ((@@ERROR = 0) AND ( @@ROWCOUNT > 0))
BEGIN
BEGIN TRANSACTION
DELETE FROM Projekt WHERE id = @idProjektu
IF ((@@ERROR = 0) AND ( @@ROWCOUNT > 0))
BEGIN
DELETE FROM Zadanie WHERE idProjekt = @idProjektu
IF ((@@ERROR = 0) AND ( @@ROWCOUNT > 0))
BEGIN
COMMIT TRANSACTION
END
ELSE
BEGIN
ROLLBACK TRANSACTION
END
END
ELSE
BEGIN
ROLLBACK TRANSACTION
END
END
ELSE
BEGIN
RETURN(0)
END
END
GO
/*
Funkcja zwracajaca nazwe statusu projektu/zadania podanego w id
*/
CREATE FUNCTION PodajStatus(@idStatusu INT)
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @nazwaStatusu VARCHAR(50)
SELECT @nazwaStatusu = nazwa FROM StatusProjektu WHERE id = @idStatusu
RETURN (@nazwaStatusu)
END
GO
/*
Funkcja zwracajaca nazwe priorytetu zadania podanego w id
*/
CREATE FUNCTION PodajPriorytet(@idPriorytet INT)
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @nazwaPriorytetu VARCHAR(50)
SELECT @nazwaPriorytetu = nazwa FROM PriorytetZadania WHERE id = @idPriorytet
RETURN (@nazwaPriorytetu)
END
GO
/*
Po dodanie zadania automatyczne nasanie mu statusu=1, tzn. rozpoczety
*/
CREATE TRIGGER InicjujStatusZadania
ON Zadanie
AFTER INSERT
AS
UPDATE Zadanie SET status = 1 WHERE id = (SELECT id FROM Inserted)
GO
/*
Widok listy projektow
*/
CREATE VIEW listaProjektow
AS
SELECT
Projekt.kod,
Projekt.nazwa,
dbo.PodajStatus(status) AS statusNazwa
FROM
Projekt
GO
/*
Widok listy zadan
*/
CREATE VIEW listaZadan
AS
SELECT
Zadanie.nazwa,
Pracownik.nazwisko,
Pracownik.imie,
dbo.PodajPriorytet(Zadanie.priorytet) AS priorytetNazwa,
dbo.PodajStatus(Zadanie.status) AS statusNazwa
FROM
Zadanie, Pracownik
WHERE
Zadanie.idPracownik = Pracownik.id
GO
-- wywolanie procedur
EXECUTE DodajZadanie 'BAZA', 1, 'Projekt bazy danych', 1
GO
EXECUTE DodajZadanie 'BAZA', 2, 'Dokumentacja bazy danych', 3
GO
EXECUTE DodajZadanie 'SQL', 1, 'Procedura dodajaca zadanie', 1
GO
EXECUTE ZmienStatusProjektu 'BAZA', 3
GO
SELECT * FROM listaProjektow
SELECT * FROM listaZadan
GO
-- usuniecie projektu SQL
EXEC UsunProjekt 'SQL'
GO
SELECT * FROM listaProjektow
SELECT * FROM listaZadan
GO