-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLibraryStoredProcs.sql
More file actions
232 lines (201 loc) · 17.9 KB
/
Copy pathLibraryStoredProcs.sql
File metadata and controls
232 lines (201 loc) · 17.9 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
------------------------------------------------------------------------------------------------------------------------------------
-- Library Stored Procs
------------------------------------------------------------------------------------------------------------------------------------
USE db_library;
GO
------------------------------------------------------------------------------------------------------------------------------------
-- 1 - BookCountForTitleInBranch - # books with a specified title in a specified branch
------------------------------------------------------------------------------------------------------------------------------------
-- Verify that the stored procedure does not exist.
IF OBJECT_ID ('usp_BookCountForTitleInBranch', 'P') IS NOT NULL
DROP PROCEDURE usp_BookCountForTitleInBranch;
GO
-- Create procedure with parameters BookTitle and BranchName
CREATE PROCEDURE usp_BookCountForTitleInBranch @BookTitle VARCHAR(200), @BranchName VARCHAR(75)
AS
SELECT
SUM(bc.book_copies_numCopies) AS '# of Copies'
FROM tbl_book b
LEFT JOIN tbl_book_copies bc ON b.book_ID = bc.book_copies_bookID
LEFT JOIN tbl_library_branch l ON bc.book_copies_branchID = l.library_branch_ID
WHERE b.book_title = @BookTitle AND l.library_branchName = @BranchName
;
GO
-- Execute procedure. Catch any errors
BEGIN TRY
EXEC usp_BookCountForTitleInBranch 'The Lost Tribe','Sharpstown'
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO
------------------------------------------------------------------------------------------------------------------------------------
-- 2 - BookCountForTitlePerBranch - # books with title in each library branch
------------------------------------------------------------------------------------------------------------------------------------
-- Verify that the stored procedure does not exist.
IF OBJECT_ID ('usp_BookCountForTitlePerBranch', 'P') IS NOT NULL
DROP PROCEDURE usp_BookCountForTitlePerBranch;
GO
-- Create procedure with parameter BookTitle
CREATE PROCEDURE usp_BookCountForTitlePerBranch @BookTitle VARCHAR(200)
AS
SELECT
l.library_branchName AS 'Branch', SUM(bc.book_copies_numCopies) AS '# of Copies'
FROM tbl_book b
LEFT JOIN tbl_book_copies bc ON b.book_ID = bc.book_copies_bookID
LEFT JOIN tbl_library_branch l ON bc.book_copies_branchID = l.library_branch_ID
WHERE b.book_title = @BookTitle
GROUP BY l.library_branchName
;
GO
-- Execute procedure. Catch any errors
BEGIN TRY
EXEC usp_BookCountForTitlePerBranch 'The Lost Tribe'
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO
------------------------------------------------------------------------------------------------------------------------------------
-- 3 - BorrowersNoLoans - borrowers with no book loans
------------------------------------------------------------------------------------------------------------------------------------
-- Verify that the stored procedure does not exist.
IF OBJECT_ID ('usp_BorrowersNoLoans', 'P') IS NOT NULL
DROP PROCEDURE usp_BorrowersNoLoans;
GO
-- Create procedure
CREATE PROCEDURE usp_BorrowersNoLoans
AS
SELECT
b.borrower_name AS 'Borrowers With No Book Loans'
FROM tbl_borrower b
LEFT JOIN tbl_book_loans bl on b.borrower_cardNo = bl.book_loans_cardNo
WHERE bl.book_loans_bookID IS NULL
ORDER BY b.borrower_name
;
GO
-- Execute procedure. Catch any errors
BEGIN TRY
EXEC usp_BorrowersNoLoans
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO
------------------------------------------------------------------------------------------------------------------------------------
-- 4 - DueTodayInBranch - book title, borrow's name and address due today for a specified branch
------------------------------------------------------------------------------------------------------------------------------------
SELECT
b.book_title AS 'Title', br.borrower_name AS 'Borrower', br.borrower_address AS 'Address'
FROM tbl_book_loans bl
LEFT JOIN tbl_borrower br ON bl.book_loans_cardNo = br.borrower_cardNo
LEFT JOIN tbl_book b ON bl.book_loans_bookID = b.book_ID
LEFT JOIN tbl_library_branch l ON bl.book_loans_branchID = l.library_branch_ID
WHERE bl.book_loans_DueDate = CAST(GETDATE() AS DATE) AND l.library_branchName = 'Sharpstown'
ORDER BY b.book_title
;
-- Verify that the stored procedure does not exist.
IF OBJECT_ID ('usp_DueTodayInBranch', 'P') IS NOT NULL
DROP PROCEDURE usp_DueTodayInBranch;
GO
-- Create procedure with parameters BookTitle and BranchName
CREATE PROCEDURE usp_DueTodayInBranch @BranchName VARCHAR(75)
AS
SELECT
b.book_title AS 'Title', br.borrower_name AS 'Borrower', br.borrower_address AS 'Address'
FROM tbl_book_loans bl
LEFT JOIN tbl_borrower br ON bl.book_loans_cardNo = br.borrower_cardNo
LEFT JOIN tbl_book b ON bl.book_loans_bookID = b.book_ID
LEFT JOIN tbl_library_branch l ON bl.book_loans_branchID = l.library_branch_ID
WHERE bl.book_loans_DueDate = CAST(GETDATE() AS DATE) AND l.library_branchName = @BranchName
ORDER BY b.book_title
;
GO
-- Execute procedure. Catch any errors
BEGIN TRY
EXEC usp_DueTodayInBranch 'Sharpstown'
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO
------------------------------------------------------------------------------------------------------------------------------------
-- 5 - BooksLoanedPerBranch - branch name and number of books loaned out from each branch
------------------------------------------------------------------------------------------------------------------------------------
-- Verify that the stored procedure does not exist.
IF OBJECT_ID ('usp_BooksLoanedPerBranch', 'P') IS NOT NULL
DROP PROCEDURE usp_BooksLoanedPerBranch;
GO
-- Create procedure
CREATE PROCEDURE usp_BooksLoanedPerBranch
AS
SELECT
l.library_branchName AS 'Branch', COUNT(bl.book_loans_bookID) AS 'Books Loaned'
FROM tbl_library_branch l
RIGHT JOIN tbl_book_loans bl ON l.library_branch_ID = bl.book_loans_branchID
GROUP BY l.library_branchName
;
GO
-- Execute procedure. Catch any errors
BEGIN TRY
EXEC usp_BooksLoanedPerBranch
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO
------------------------------------------------------------------------------------------------------------------------------------
-- 6 - BorrowersWithLargeBookLoans - borrow name, address, and number of books loaned if more than 5 books checked out
------------------------------------------------------------------------------------------------------------------------------------
-- Verify that the stored procedure does not exist.
IF OBJECT_ID ('usp_BorrowersWithLargeBookLoans', 'P') IS NOT NULL
DROP PROCEDURE usp_BorrowersWithLargeBookLoans;
GO
-- Create procedure
CREATE PROCEDURE usp_BorrowersWithLargeBookLoans
AS
SELECT
br.borrower_name AS 'Name', br.borrower_address AS 'Address', COUNT(bl.book_loans_bookID) AS 'Books Loaned'
FROM tbl_book_loans bl
LEFT JOIN tbl_borrower br ON bl.book_loans_cardNo = br.borrower_cardNo
GROUP BY br.borrower_name, br.borrower_address
HAVING COUNT(bl.book_loans_bookID) > 5
;
GO
-- Execute procedure. Catch any errors
BEGIN TRY
EXEC usp_BorrowersWithLargeBookLoans
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO
------------------------------------------------------------------------------------------------------------------------------------
-- 7 - BookCountPerAuthorInBranch - title and number of copies of books by a specified author at a specified branch
------------------------------------------------------------------------------------------------------------------------------------
-- Verify that the stored procedure does not exist.
IF OBJECT_ID ('usp_BookCountPerAuthorInBranch', 'P') IS NOT NULL
DROP PROCEDURE usp_BookCountPerAuthorInBranch;
GO
-- Create procedure with parameters BookAuthor and BranchName
CREATE PROCEDURE usp_BookCountPerAuthorInBranch @BookAuthor VARCHAR(75), @BranchName VARCHAR(75)
AS
SELECT
b.book_title AS 'Title', SUM(bc.book_copies_numCopies) AS '# Books', ba.book_authors_authorname AS 'Author', l.library_branchName AS 'Branch'
FROM tbl_book b
LEFT JOIN tbl_book_authors ba ON b.book_ID = ba.book_authors_bookID
LEFT JOIN tbl_book_copies bc ON b.book_ID = bc.book_copies_bookID
LEFT JOIN tbl_library_branch l ON bc.book_copies_branchID = l.library_branch_ID
WHERE ba.book_authors_authorname = @BookAuthor AND l.library_branchName = @BranchName
GROUP BY b.book_title, ba.book_authors_authorname, l.library_branchName
ORDER BY b.book_title, ba.book_authors_authorname, l.library_branchName
;
GO
-- Execute procedure. Catch any errors
BEGIN TRY
EXEC usp_BookCountPerAuthorInBranch 'Stephen King','Central'
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO