· 6 years ago · Mar 12, 2019, 08:20 PM
1use mrzeppa
2
3DROP TABLE IF EXISTS rezerwacja
4GO
5DROP TABLE IF EXISTS klient
6GO
7DROP TABLE IF EXISTS car
8GO
9
10
11
12
13
14CREATE TABLE klient (
15 id_klient INT NOT NULL PRIMARY KEY IDENTITY(1, 1),
16 nazwisko VARCHAR(20) NOT NULL, CHECK(LEN(nazwisko) >= 3),
17 nr_prawa_jazdy varchar(13), CHECK(LEN(nr_prawa_jazdy) = 13),
18);
19
20CREATE TABLE car (
21 id_car INT NOT NULL PRIMARY KEY IDENTITY (1, 1),
22 typ VARCHAR(20) NOT NULL, CHECK(LEN(typ) >= 3),
23 cena MONEY
24);
25
26CREATE TABLE rezerwacja (
27 id_rezerwacja INT NOT NULL PRIMARY KEY IDENTITY (1, 1),
28 id_klient INT NOT NULL FOREIGN KEY REFERENCES klient (id_klient),
29 id_car INT NOT NULL FOREIGN KEY REFERENCES car (id_car),
30 data_pocz DATE,
31 data_konc DATE
32);
33
34INSERT INTO klient VALUES
35 ('Kowalski', '1231231231231'),
36 ('Nowak', '1a2b3c1a2b3cz'),
37 ('Rutkowski', '1234567891011'),
38 ('Górski', 'abcdefghijklm');
39
40INSERT INTO car VALUES
41 ('Sedan', 200.00),
42 ('SUV', 400.00),
43 ('Hatchback', 150.00),
44 ('Combi', 660.00);
45
46INSERT INTO rezerwacja VALUES
47 (2, 4, '2019.01.01', '2019.01.15'),
48 (1, 4, '2019.01.17', '2019.01.23'),
49 (3, 1, '2019.01.12', '2019.01.18'),
50 (4, 2, '2019.01.01', '2019.01.11');
51
52
53
54
55ALTER VIEW raport
56AS
57 SELECT k.id_klient, k.nazwisko, k.nr_prawa_jazdy, SUM(DATEDIFF(day, data_pocz, data_konc))*c.cena AS [suma_pieniedzy] FROM rezerwacja r
58 INNER JOIN klient k ON k.id_klient = r.id_klient
59 INNER JOIN car c ON c.id_car = r.id_car
60 GROUP BY k.id_klient, r.data_pocz, r.data_konc, c.cena, k.nazwisko, k.nr_prawa_jazdy
61
62
63ALTER TABLE klient ADD usuniety INT DEFAULT 0 NOT NULL;
64
65
66
67
68
69ALTER TRIGGER usun ON klient
70INSTEAD OF DELETE
71AS
72BEGIN
73 DECLARE @id INT
74 SET @id = (SELECT id_klient FROM deleted)
75 UPDATE klient SET usuniety = 1 WHERE id_klient = @id
76END
77
78DELETE FROM klient WHERE id_klient = 4
79
80SELECT * FROM klient;
81
82ALTER FUNCTION sprawdz_daty (@id_rez INT)
83RETURNS INT
84AS
85BEGIN
86 DECLARE @data1 DATE
87 DECLARE @data2 DATE
88 SET @data1 = (SELECT data_pocz FROM rezerwacja WHERE id_rezerwacja = @id_rez)
89 SET @data2 = (SELECT data_konc FROM rezerwacja WHERE id_rezerwacja = @id_rez)
90 IF (DATEDIFF(day, @data1, @data2) > 0)
91 RETURN 1
92 RETURN 0
93END
94
95SELECT dbo.sprawdz_daty(6)
96
97SELECT DATEDIFF(day, '2019.01.31', '2019.01.15') AS w
98
99
100CREATE TRIGGER zmienDaty ON rezerwacja
101AFTER INSERT
102AS
103BEGIN
104 DECLARE @id_rez INT
105 DECLARE @data1 DATE
106 SET @data1 = (SELECT data_pocz FROM inserted)
107 SET @id_rez = (SELECT id_rezerwacja FROM inserted)
108 IF (dbo.sprawdz_daty(@id_rez) = 0)
109 UPDATE rezerwacja SET data_konc = @data1 WHERE id_rezerwacja = @id_rez
110
111END
112
113select * from rezerwacja
114
115INSERT INTO rezerwacja VALUES
116 (2, 4, '2019.01.31', '2019.01.15');
117
118select * from rezerwacja