-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsproc_alex.sql
More file actions
280 lines (247 loc) · 6.49 KB
/
Copy pathsproc_alex.sql
File metadata and controls
280 lines (247 loc) · 6.49 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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
USE MASS_Entertainment_database
GO
-- Needed proceedures:
-- usp_getPerformerID
CREATE PROCEDURE usp_getPerformerID
@perfTypeN NVARCHAR(50),
@perfName NVARCHAR(50),
@perfID INT OUTPUT
AS
DECLARE @perfTypeID INT
SET @perfTypeN = (SELECT PerformerTypeID
FROM tblPERFORMER_TYPE
WHERE PerformerTypeName = @perfTypeN)
SET @perfID = (SELECT PerformerID
FROM tblPERFORMER
WHERE PerformerTypeID = @perfTypeN
AND PerformerNAme = @perfName)
GO
-- usp_getEventTypeID
CREATE PROCEDURE usp_getEventTypeID
@eventTN NVARCHAR(50),
@eventID INT OUTPUT
AS
SET @eventID = (SELECT EventTypeID
FROM tblEVENT_TYPE
WHERE EventTypeName = @eventTN)
GO
-- usp_getEventID
CREATE PROCEDURE usp_getEventID
@eventName NVARCHAR(50),
@eventID INT OUTPUT
AS
SET @eventID = (SELECT EventID FROM tblEVENT WHERE EventName = @eventName)
GO
-- usp_getVenueID
CREATE PROCEDURE usp_getVenueID
@venueName NVARCHAR(50),
@venueID INT OUTPUT
AS
SET @venueID = (SELECT VenueID FROM tblVENUE WHERE VenueName = @venueName)
GO
-- usp_newEvent
-- *GetPerformerID
-- *GetEventTypeID
CREATE PROCEDURE usp_newEvent
@newEventName NVARCHAR(50),
@newEventTypeName NVARCHAR(50),
@newPerformerTypeName NVARCHAR(50),
@newPerformerName NVARCHAR(50)
AS
BEGIN
DECLARE @ET_ID INT, @P_ID INT
EXECUTE usp_getPerformerID
@perfTypeN = @newPerformerTypeName,
@perfName = @newPerformerName,
@perfID = @P_ID OUTPUT
IF @P_ID IS NULL
BEGIN
RAISERROR('Performer name came up empty man!',11,1)
RETURN
END
EXECUTE usp_getEventTypeID
@eventTN = @newEventTypeName,
@eventID = @ET_ID OUTPUT
IF @ET_ID IS NULL
BEGIN
RAISERROR('EventType name came up empty man!',11,1)
RETURN
END
BEGIN TRAN T1
INSERT INTO tblEVENT(EventTypeID, PerformerID, EventName)
VALUES(@ET_ID, @P_ID, @newEventName)
COMMIT TRAN T1
END
GO
-- uspNewVenueEvent
-- *GetEventID
-- *GetVenueID
CREATE PROCEDURE usp_newVenueEvent
@venueName NVARCHAR(50),
@newEventName NVARCHAR(50),
@start DATETIME,
@end DATETIME
AS
BEGIN
DECLARE @E_ID INT, @V_ID INT
EXEC usp_getEventID
@eventName = @newEventName,
@eventID = @E_ID OUTPUT
IF @E_ID IS NULL
BEGIN
RAISERROR('Event name is NULL man!', 11, 1)
RETURN
END
SET @V_ID = (SELECT VenueID FROM tblVENUE WHERE VenueName = @venueName)
IF @V_ID IS NULL
BEGIN
RAISERROR('Venue name is NULL man!', 11, 1)
RETURN
END
BEGIN TRAN T1
INSERT INTO tblVENUE_EVENT(VenueID, EventID, VenueEventStartTime, VenueEventEndTime)
VALUES(@V_ID, @E_ID, @start, @end)
COMMIT TRAN T1
END
GO
/*
Needed Business Rules:
- Venue_Vendor duration cant be under 1 year
*/
-- Inserting new values into tblVENUE_TYPE
INSERT INTO tblVENUE_TYPE(VenueTypeName, VenueTypeDesc)
VALUES
('Music Venue', NULL),
('Cafe', NULL),
('Theater', NULL),
('Resturant', NULL),
('Bar', NULL),
('Nightclub', NULL)
GO
-- Adding data from temp table to tblVENUE
INSERT INTO tblVENUE
SELECT * FROM venue_dataCSV
GO
-- Computed Column: Concert duration
CREATE FUNCTION fn_durationOfConcert(@PKID INT)
RETURNS INT
AS
BEGIN
DECLARE @RET INT = (
SELECT (DATEDIFF(MINUTE, VenueEventStartTime, VenueEventEndTime))
FROM tblVENUE_EVENT
WHERE VenueEventID = @PKID
)
RETURN @RET
END
GO
ALTER TABLE tblVENUE_EVENT
ADD Duration
AS (dbo.fn_durationOfConcert(VenueEventID))
GO
CREATE FUNCTION NoGuitarsInCafes()
RETURNS INT
AS
BEGIN
DECLARE @RET INT = 0
IF EXISTS
(
SELECT *
FROM tblEQUIPMENT_TYPE ET
JOIN tblEQUIPMENT E ON ET.EquipmentTypeID = E.EquipmentTypeID
JOIN tblPERFORMER P ON E.PerformerID = P.PerformerID
JOIN tblEVENT EV ON P.PerformerID = EV.PerformerID
JOIN tblVENUE_EVENT VE ON EV.EventID = VE.EventID
JOIN tblVENUE V ON VE.VenueID = V.VenueID
JOIN tblVENUE_TYPE VT ON V.VenueTypeID = VT.VenueTypeID
WHERE VT.VenueTypeName LIKE 'Cafe'
AND ET.EquipmentTypeName LIKE 'Guitar'
)
BEGIN
SET @RET = 1
END
RETURN @RET
END
GO
ALTER TABLE tblVENUE_EVENT
ADD CONSTRAINT CK_NoGuitarsInCafes
CHECK (dbo.NoGuitarsInCafes() = 0)
GO
-- Number of Events held at each venue, greater than 10
CREATE VIEW v_EventsPerVenue AS
SELECT V.VenueName, COUNT(E.EventID) AS NumberOfEvents
FROM tblVENUE V
JOIN tblVENUE_EVENT VE ON V.VenueID = VE.VenueID
JOIN tblEVENT E ON VE.EventID = E.EventID
GROUP BY V.VenueName
HAVING COUNT(E.EventID) > 10
GO
SELECT * FROM v_EventsPerVenue
ORDER BY NumberOfEvents DESC
INSERT INTO tblTICKET_TYPE(TicketTypeName, TicketTypeDesc)
VALUES ('VIP', NULL),
('Standing Room', NULL),
('Sitting', NULL),
('Back Stage Pass', NULL)
SELECT * FROM tblTICKET_TYPE
DELETE FROM tblTICKET_TYPE WHERE TicketTypeID = 8
GO
-- creating orders
CREATE PROCEDURE usp_getNewLineItem
@merchID INT,
@quant INT,
@price money,
@perfID INT,
@orderDate DATE
AS
INSERT INTO tblORDER(OrderDate, PerformerID)
VALUES (@orderDate, @perfID)
DECLARE @O_ID INT
SET @O_ID = SCOPE_IDENTITY()
BEGIN
DECLARE @RC int = 0;
BEGIN TRY
BEGIN TRAN T1
INSERT INTO tblLINEITEM(Quantity, LineItemPrice, PriceExtended, MerchID, OrderID)
VALUES(@quant, @price, @price * @quant, @merchID, @O_ID)
COMMIT TRAN T1
SET @RC = +1;
END TRY
BEGIN CATCH
IF(@@Trancount > 0)
ROLLBACK TRAN;
PRINT Error_Message();
SET @RC = -1;
END CATCH
RETURN @RC;
END
GO
CREATE PROCEDURE davis_merch_wrapper
@RUN INT
AS
DECLARE @PerformerID INT
DECLARE @date DATE
DECLARE @prodID INT
DECLARE @randomStartDate DATE
DECLARE @randomEndDate DATE
DECLARE @randomQty INT
DECLARE @money MONEY
WHILE @RUN > 0
BEGIN
SET @randomStartDate = '2011-01-01'
SET @randomEndDate = '2020-01-31'
SET @date = (select dateadd(day,
rand(checksum(newid()))*(1+datediff(day, @randomStartDate, @randomEndDate)),
@randomStartDate))
SET @PerformerID = 15 --Red Hot Chili Pepers
SET @prodID = 1 -- tshirt
SET @randomQty = (SELECT FLOOR(RAND()*(10-5)+5))
SET @money = (SELECT MerchPrice FROM tblMERCH WHERE MerchID = @prodID)
EXECUTE usp_getNewLineItem
@merchID = @prodID,
@quant = @randomQty,
@price = @money,
@perfID = @PerformerID,
@orderDate = @date
SET @RUN = @RUN -1
END