-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDDL1.sql
More file actions
154 lines (140 loc) · 2.97 KB
/
DDL1.sql
File metadata and controls
154 lines (140 loc) · 2.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
--DROP DATABASE Tourplandb
--Go
--------Database Create
--CREATE DATABASE Tourplandb
--GO
Use Tourplandb
Go
----------Table Creation
CREATE TABLE travelagents
(
agent_id INT PRIMARY KEY,
agent_name NVARCHAR(50) NOT NULL
)
GO
CREATE TABLE tourpackages
(
package_id INT PRIMARY KEY,
package_category NVARCHAR(50) NOT NULL,
package_name NVARCHAR(50) NOT NULL,
cost_per_person MONEY NOT NULL,
tour_time NVARCHAR(50) NOT NULL
)
Go
CREATE TABLE tourists
(
tourist_id INT PRIMARY KEY,
tourist_name NVARCHAR(50) NOT NULL,
tourist_status NVARCHAR(50) NOT NULL,
tourist_occupation NVARCHAR(50) NOT NULL,
package_id INT NOT NULL REFERENCES tourpackages (package_id)
)
Go
CREATE TABLE package_features
(
feature_id INT PRIMARY KEY,
transport_mode NVARCHAR(50) NOT NULL,
hotel_booking NVARCHAR(50) NOT NULL,
package_id INT NOT NULL REFERENCES tourpackages (package_id)
)
Go
CREATE TABLE agent_tourpackages
(
agent_id INT NOT NULL REFERENCES travelagents (agent_id),
package_id INT NOT NULL REFERENCES tourpackages(package_id),
PRIMARY KEY(agent_id,package_id)
)
Go
------------------Store procedure
----------Insert
CREATE PROC spInsert_travelagents @n NVARCHAR(50)
AS
DECLARE @id INT
SELECT @id = ISNULL(MAX(agent_id), 0)+1 FROM travelagents
BEGIN TRY
INSERT INTO travelagents(agent_id, agent_name)
VALUES (@id, @n)
RETURN @id
END TRY
BEGIN CATCH
;
THROW 50001, 'Error encountered', 1
RETURN 0
END CATCH
GO
------Update
CREATE PROC spUpdate_travelagents @id INT,@n NVARCHAR(50)
AS
BEGIN TRY
UPDATE travelagents
SET agent_name = @n
WHERE agent_id = @id
END TRY
BEGIN CATCH
;
THROW 50001, 'Error encountered', 1
RETURN 0
END CATCH
GO
-----------Delete
CREATE PROC spDelete_travelagents @id INT
AS
BEGIN TRY
DELETE travelagents
WHERE agent_id = @id
END TRY
BEGIN CATCH
;
THROW 50001, 'Error encountered', 1
RETURN 0
END CATCH
GO
---------------nonclustered
CREATE NONCLUSTERED INDEX ixpackagename
ON tourpackages(package_id)
GO
----View
CREATE VIEW v_tour_Info
AS
SELECT tourist_name, package_category ,agent_id, tourist_occupation
FROM tourists t
INNER JOIN tourpackages tp
ON t.package_id=tp.package_id
INNER JOIN agent_tourpackages atp
ON tp.package_id= atp.package_id
Go
--------A table valued function
CREATE FUNCTION fnTable(@agent_id INT) RETURNS TABLE
AS
RETURN
(
SELECT tourist_name, package_category ,agent_id, tourist_occupation
FROM tourists t
INNER JOIN tourpackages tp
ON t.package_id=tp.package_id
INNER JOIN agent_tourpackages atp
ON tp.package_id= atp.package_id
WHERE agent_id=@agent_id
)
Go
--------------------------------TRIGGERRRRRRRRRRRR
CREATE TRIGGER tragent_packages
ON agent_tourpackages for insert
AS
BEGIN
DECLARE @agentid int
SELECT @agentid=agent_id FROM inserted
IF exists
(
SELECT count(*), agent_id FROM agent_tourpackages
WHERE agent_id =2
GROUP BY agent_id
HAVING count(*) >4
)
BEGIN
ROLLBACK TRANSACTION
;
THROW 50001,'Galaxy agency has already had five packages',1
END
END
GO