Qua việc tìm kiếm và tham khảo các mô hình quản lý các hoạt động của thư viện trường học, ta có thể thấy được các chủ thể chính cần được quản lý : quản lý sách c ủa thư viện, quản lý nh
Trang 1TRƯỜNG ĐẠI HỌC MỞ HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
-
BÁO CÁO BÀI TẬP LỚN MÔN: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
<NHÓM 12>
Đề tài: Quản Lý Thư Viện
Giáo Viên Hướng Dẫn: Nguyễn Thị Tâm
Sinh Viên Thực Hiện: Mai Thị Dinh – 2010A03
Nguyễn Thị Thanh – 2010A03
Đỗ Mạnh Hùng – 2010A03 Bùi Thành Đan – 1910A05
Hà Nội, năm 2021
Trang 2PHÂN CÔNG VÀ KẾ HOẠCH THỰC HIỆN
Mai Thị Dinh Phát biểu bài toán, xây dựng view, phân tán Hoàn Thành Nguyễn Thị Thanh Xây dựng CSDL quan hệ,
Bùi Thành Đan Proceduce, phân quyền Hoàn Thành
Trang 3M ục Lục
I Phát biểu bài toán 1
II Mô hình thực thể liên kết 2
1.Mô hình ER: 3
2 Xây dựng mô hình CSDL quan hệ 3
3 Chuẩn hóa CSDL của bài toán 5
III Xây dựng bảng cơ sở dữ liệu của bài toán 6
1.Xác định cấu trúc bảng: 6
2 Diagram: 8
IV Tạo cơ sở dữ liệu 8
1 Tạo database và bảng 8
2 Nhập dữ liệu vào các bảng 11
V.Thực hiện các yêu cầu 15
1 Truy vấn dữ liệu 15
a.Truy vấn dữ liệu từ 1 bảng 15
b.Truy vấn dữ liệu từ nhiều bảng 16
2.Xây dựng các view 18
3 Xây dựng Proceduce 22
4 Xây dựng các trigger 31
VI Phân quyền và bảo mật CSDL 35
VII Phân tán 38
1.Phân tán ngang 38
2.Phân tán dọc 43
VIII Tài liệu tham khảo: 48
Trang 4I Phát bi ểu bài toán
Để quản lý thư viện một cách hợp lý và hiệu quả , ta cần xây dựng một hệ thống
qu ản lý thư viện một cách hiệu quả và tối ưu nhất Vì vậy, cần xác định rõ các chủ thể cần quản lý cũng như các hoạt động chính
Qua việc tìm kiếm và tham khảo các mô hình quản lý các hoạt động của thư viện trường học, ta có thể thấy được các chủ thể chính cần được quản lý : quản lý sách
c ủa thư viện, quản lý nhân viên làm việc cho thư viện, quản lý NXB, quản lý việc mượn trả sách của thư viện và quản lý thẻ độc giả
Quản lý Sách:
- Thư viện có nhiều SÁCH, mỗi sách sẽ bao gồm các thông tin như mã sách,
tên sách, tác gi ả, thể loại, năm xuất bản,số lượng, giá tiền Các cuốn sách phân
bi ệt với nhau bằng mã sách và tên sách không trùng nhau
Quản lý NXB:
- Trong mỗi cuốn sách có chứa thông tin của NHÀ XUẤT BẢN Một NXB có
thể cung cấp một hoặc nhiều sách cho thư viện.Và để tiện cho việc liên lạc cần lưu lại thông tin của NXB gồm: Mã NXB ,tên NXB, Địa chỉ,email, SĐT Quản lý Nhân viên:
- Mỗi NHÂN VIÊN làm việc trong thư viện cần lưu lại các thông tin sau: Mã
NV, Họ tên, Ngày sinh, Ngày vào làm , SĐT, Giới tính,Địa chỉ, HSL, PC Quy định mỗi nhân viên phải có mã riêng biệt và lớn hơn 18 tuổi
Quản lý Thẻ Độc Giả
Trang 5- Khi đến mượn sách, độc giả sẽ được cấp một THẺ ĐỘC GIẢ, trên đó có mã
thẻ (Mã thẻ được đánh số tự động bắt dầu từ 1,2,3…), tên độc giả , ngày sinh, giới tính, địa chỉ, số điện thoại, ngày bắt đầu, ngày hết hạn Với mỗi thẻ, độc
gi ả có thể mượn được nhiều sách và ngược lại mỗi sách có thể được mượn bởi nhi ều thẻ độc giả
Quản lý Phiếu Mượn Trả:
- Độc giả sau khi đến mượn sách cần lưu lại thông tin của PHIẾU MƯỢN
TR Ả bao gồm mã mượn trả, ngày mượn , ngày hẹn trả Độc giả chỉ được
mượn sách tối đa trong 15 ngày kể từ ngày mượn
II Mô hình th ực thể liên kết
T ừ bài toán trên ,ta xác định được các thực thể và thuộc tính:
- NHANVIEN : Mã NV, Họ tên, Ngày sinh, Ngày vào làm, SĐT, Giới tính,
Địa chỉ, HSL, PC.
- SACH : Mã sách , Tên sách, Tác giả, Thể loại, Năm XB, Số lượng, Giá tiền.
- NHA XUAT BAN : Mã NXB , Tên NXB, Địc chỉ, Email, SĐT.
- THE DOC GIA : Mã thẻ, Tên ĐG, Ngày sinh, Giới tính, Địa chỉ, SĐT, Ngày bắt đầu, Ngày hết hạn.
- PHIEU MUONTRA: Mã mượn trả, Ngày mượn, Ngày hẹn trả
Trang 7PHIEUMUONTRA (Mã mượn trả, Ngày mượn, Ngày hẹn trả,Mã thẻ)
PHIEUMUONTRA( Mã mượn trả, Ngày mượn, Ngày hẹn trả,Mã thẻ, Mã NV)
QT 5: Chuy ển liên kết M-N ( Sinh ra quan hệ mới)
SACH_PHIEUMUONTRA = CT_PHIEUMUONTRA
CT_PHIEUMUON TRA(Mã mượn trả,Mã sách,Ngày trả,Tình trạng)
➔ Ta có CSDL cuối cùng của bài toán là:
tblNHANVIEN (sMaNV , sTenNV, dNgaysinh, dNgayvaolam, sSĐT, bGioitinh, sDiachi, fHSL, fPC)
tblSACH (sMaSach, sTensach, sTacgia, sTheLoai, iNamXB, iSoluong, fGia tien
,sMaNXB)
tblNXB (sMaNXB , sTenNXB, sDiachi,sEmail, sSĐT)
tblTHEDOCGIA (sMaThe , sTenĐG, dNgaysinh, bGioitinh, sDiachi , sSĐT, dNgaybatdau, dNgayhethan)
tblPHIEUMUONTRA ( sMaMT, dNgaymuon, dNgayhentra, sMaThe, sMaNV)
Trang 8tblCT_PHIEUMUONTRA (sMaMT, sMaSach, dNgaytra,sTinhtrang)
3 Chuẩn hóa CSDL của bài toán
T ừ mô hình quan hệ ta suy ra các phụ thuộc hàm:
sMaNV-> sTenNV, dNgaysinh, dNgayvaolam, sSĐT, bGioitinh, sDiachi, fHSL, fPC
sMaSach-> sTensach, sTacgia, sTheLoai, iNamXB, iSoluong, fGia tien ,sMaNXB
sMaNXB- > sTenNXB, sDiachi,sEmail, sSĐT
sMaThe-> sTenĐG, dNgaysinh, bGioitinh, sDiachi , sSĐT, dNgaybatdau,
dNgayhethan
sMaMT-> dNgaymuon, dNgayhentra, sMaThe, sMaNV
sMaMT->sMaSach, dNgaytra,sTinhtrang
=> Từ các phụ thuộc hàm trên ta thấy:
- Mọi thuộc tính đều là nguyên tố, giá trị các thuộc tính trên bộ
là đơn trị, không có thuộc tính nào có giá trị được tính toán từ một số
thuộc tính khác.
Lược đồ quan hệ trên đã ở dạng chuẩn 1NF.
- Mọi thuộc tính không khóa của quan hệ đều phụ thuộc hàm
đầy đủ vào khóa chính.
Lược đồ quan hệ trên đã ở dạng chuẩn 2NF.
- Mọi thuộc tính không khóa của quan hệ đều không phụ thuộc
bắc cầu vào bất kì khóa chính của quan hệ.
Lược đồ quan hệ trên đã ở dạng chuẩn 3NF.
Trang 9Vậy lược đồ quan hệ đã được chuẩn hóa về dạng cao nhất – 3NF
III Xây d ựng bảng cơ sở dữ liệu của bài toán
1.Xác định cấu trúc bảng:
tblNHANVIEN : lưu trữ thông tin của bảng NHÂN VIÊN
STT Tên thuộc
tính
Kiểu dữ liệu Ràng buộc Ghi chú
4 dNgayvaolam datetime dNgayvaolam<=getdate() Ngày vào làm
6 sGioitinh Bit Chỉ nhận giá trị true hoặc
4 sMaNXB varchar(10) FK, tham chiếu tblNXB Mã nhà xuất
bản
tblNXB: lưu trữ thông tin của bảng NXB
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
Trang 101 sMaNXB varchar(10) PK Mã nhà xuất bản
tblTHEDOCGIA: lưu trữ thông tin của bảng THẺ ĐỘC GIẢ
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
giả
tblPHIEUMUONTRA : lưu trữ thông tin của PHIẾU MƯỢN TRẢ
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
5 sMaNV varchar(10) FK, tham chiếu đến
tblNHANVIEN Mã nhân viên
Trang 11TblCT_PHIEUMUONTRA : lưu trữ thông tin của bảng CHI TIẾT PHIẾU
MƯỢN TRẢ
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú
2 sMasach varchar(10) PK,FK, tham chiếu
Trang 12sMaNXB VARCHAR(10) NOT NULL,
sTenNXB NVARCHAR(30) UNIQUE NOT NULL,
sDiachi NVARCHAR(30) NOT NULL,
sEmail VARCHAR(30) NOT NULL,
sSDT VARCHAR(10) NOT NULL
);
ALTER TABLE tblNXB
ADD CONSTRAINT PK_tblNXB PRIMARY KEY(sMaNXB)
tao bang tblSACH
CREATE TABLE tblSACH
(
sMasach VARCHAR(10) NOT NULL,
sMaNXB VARCHAR(10) NOT NULL,
sTensach NVARCHAR(50) UNIQUE NOT NULL,
sTacgia NVARCHAR(30) NOT NULL,
sTheloai NVARCHAR(30) NULL,
iNamXB INT NOT NULL,
iSoluong INT NOT NULL,
fGiatien FLOAT NOT NULL,
);
ràng buoc trong tblSACH
ALTER TABLE tblSACH ADD
CONSTRAINT PK_tblSACH PRIMARY KEY(sMasach ),
CONSTRAINT FK_sach_nxb FOREIGN KEY (sMaNXB ) REFERENCES tblNXB sMaNXB)
Tao bang
NHANVIEN CREATE TABLE tblNHANVIEN
(
sMaNV VARCHAR(10) NOT NULL,
sTenNV NVARCHAR(30) NOT NULL,
dNgaysinh DATETIME NOT NULL,
dNgayvaolam DATETIME NOT NULL,
sSDT VARCHAR(10) NOT NULL,
bGioitinh BIT NOT NULL,
Trang 13sDiachi NVARCHAR(30) NOT NULL
fHSL FLOAT NOT NULL
fPC FLOAT NOT NULL
);
rang buoc trong tblNHANVIEN
ALTER TABLE tblNHANVIEN
ADD CONSTRAINT PK_tblNHANVIEN PRIMARY KEY(sMaNV),
CONSTRAINT BIT CHECK (bGioiTinh = 0 or bGioiTinh = 1);
ALTER TABLE tblNHANVIEN
ADD CONSTRAINT CK_tblNHANVIEN_dNgayvaolam CHECK (dNgayvaolam <= GETDATE()),
CONSTRAINT CK_tblNHANVIEN_fHSL CHECK(fHSL>=2 and fHSL<10),
CONSTRAINT CK_tblNHANVIEN_fPC CHECK(fPC> );
ALTER TABLE tblNHANVIEN
ADD CONSTRAINT CHK_dNgaysinh CHECK (DATEDIFF(YEAR,dNgaysinh,dNgayvaolam)
>=18)
tao bang tblTHEDOCGIA
CREATE TABLE tblTHEDOCGIA(
sMathe VARCHAR(10) NOT NULL,
sTenDG NVARCHAR(30) NOT NULL,
dNgaysinh DATETIME NULL,
bGioitinh BIT NOT NULL,
sDiachi NVARCHAR(30) NOT NULL,
sSDT VARCHAR(10) NULL,
dNgaybatdau DATETIME NOT NULL,
dNgayhethan DATETIME NOT NULL,
);
rang buoc trong tblTHEDOCGIA
ALTER TABLE tblTHEDOCGIA
ADD CONSTRAINT PK_tblTHEDOCGIA PRIMARY KEY (sMathe),
CONSTRAINT CK_tblTHEDOCGIA_dNgaybatdau CHECK (dNgaybatdau <= GETDATE()),CONSTRAINT CK_tblTHEDOCGIA_dNgayhethan CHECK (dNgayhethan>dNgaybatdau)
tao bang tblPHIEUMUON
CREATE TABLE tblPHIEUMUONTRA
(
iMaMT INT IDENTITY( , ),
sMathe VARCHAR(10) NOT NULL,
sMaNV VARCHAR(10) NOT NULL,
dNgaymuon DATETIME NOT NULL,
dNgayhentra DATETIME NOT NULL
);
Trang 14rang buoc trong tblPHIEUMUONTRA
ALTER TABLE tblPHIEUMUONTRA
ADD CONSTRAINT PK_tblPHIEUMUONTRA PRIMARY KEY(iMaMT),
CONSTRAINT FK_tblPHIEUMUONTRA_Thedocgia FOREIGN KEY(sMathe) REFERENCES
ADD CONSTRAINT CHK_dNgayhentra_dNgaymuon CHECK
(DATEDIFF(DAY,dNgaymuon,dNgayhentra) <= 15);
tao bang tblCT_PHIEUMUONTRA
CREATE TABLE tblCT_PHIEUMUONTRA
(
iMaMT INT NOT NULL,
sMasach VARCHAR(10) NOT NULL ,
dNgaytra DATETIME NULL,
sTinhtrang NVARCHAR(15) NOT NULL
CONSTRAINT PK_tblCT_PHIEUMUONTRA PRIMARY KEY(iMaMT,sMasach ),
CONSTRAINT FK_PHIEUMUONTRA_CTPMT FOREIGN KEY(iMaMT ) REFERENCES
Trang 15('NXB006', N'Thời Đại', N'Mỹ Đình 1,Từ Liêm,Hà Nội','nxbthoidai@gmail.com',
INSERT INTO dbo.tblSACH(sMasach, sMaNXB,sTensach, sTacgia, sTheloai, iNamXB,
Trang 16…
('NV007', N'Đào Bích Hạnh', '1995-05-16','2014-12-19','0383640295', , N'Huyện
Ý Yên, Nam Định',6.3, 0.6)
Nhâp dữ liệu bảng thẻ độc giả
INSERT INTO dbo.tblTHEDOCGIA(sMathe, sTenDG, dNgaysinh, bGioitinh,sDiachi,
sSDT, dNgaybatdau, dNgayhethan)
Trang 17Nhập dữ liệu vào bảng PHIEUMUON
INSERT INTO dbo.tblPHIEUMUONTRA(dNgaymuon, dNgayhentra, sMathe, sMaNV)
Trang 181 Hiện tên các sách có số lượng lớn hơn 1000 và nhỏ hơn 1500
SELECT sMasach,sTensach,iSoluong FROM dbo.tblSACH
WHERE iSoluong BETWEEN 1000 AND 1500
Trang 192.Cho biết những khách hàng đã quá hạn thẻ tính đến thời điểm hiện tại
SELECT FROM dbo.tblTHEDOCGIA
WHERE dNgayhethan < GETDATE(
3 Cho biết những nhân viên có địa chỉ ở Hà Nội và đã làm việc từ 5 năm trở lên
SELECT sTenNV FROM dbo.tblNHANVIEN
WHERE sDiachi LIKE N'%Hà Nội%'
AND YEAR(GETDATE()) YEAR(dNgayvaolam) >=5
4 Hiện những độc giả chưa đủ 18 tuổi
SELECT sMathe,sTenDG FROM dbo.tblTHEDOCGIA
WHERE YEAR(GETDATE()) YEAR(dNgaysinh) < 18
5 cho biết độ tuổi trung bình của các nhân viên
SELECT AVG(YEAR(GETDATE()) YEAR(dNgaysinh)) AS [Tuổi TB]
FROM dbo.tblNHANVIEN
b.Truy vấn dữ liệu từ nhiều bảng
1 Cho biết tên các sách ,tên NXB thuộc thể loại 'Truyện ngắn'
Trang 20SELECT sTensach,sTenNXB FROM dbo.tblSACH INNER JOIN dbo.tblNXB
ON tblNXB.sMaNXB = tblSACH.sMaNXB
WHERE sTheloai=N'Truyện ngắn'
2.Tạo view cho biết tổng số lượng sách và tổng số tiền sách của từng NXB
SELECT sTenNXB,SUM(iSoluong)AS [Tổng số lượng] ,SUM(iSoluong * fGiatien)
AS [Tổng tiền]
FROM dbo.tblSACH INNER JOIN dbo.tblNXB
ON tblNXB.sMaNXB = tblSACH.sMaNXB
GROUP BY sTenNXB
3 Cho biết trong năm 2021, những độc giả nào chỉ đến mượn sách 1 lần
SELECT sTenDG FROM dbo.tblTHEDOCGIA INNER JOIN dbo.tblPHIEUMUONTRA
ON tblPHIEUMUONTRA.sMathe = tblTHEDOCGIA.sMathe
AND YEAR(dNgaymuon) =2021
GROUP BY sTenDG
HAVING COUNT(tblTHEDOCGIA.sMathe) 1
4 Cho biết tên những cuốn sách chưa được mượn lần nào
SELECT sMasach,sTensach
FROM dbo.tblSACH
WHERE sMasach NOT IN
(SELECT DISTINCT sMasach FROM dbo.tblCT_PHIEUMUONTRA)
Trang 215 Hiện tên những độc giả trả sách quá hạn và tính số ngày quá hạn
SELECT tblPHIEUMUONTRA.sMathe,sTenDG,DATEDIFF(DAY,dNgayhentra,dNgaytra)
AS [Số ngày quá hạn]
FROM dbo.tblTHEDOCGIA INNER JOIN dbo.tblPHIEUMUONTRA
ON tblPHIEUMUONTRA.sMathe = tblTHEDOCGIA.sMathe INNER JOIN
dbo.tblCT_PHIEUMUONTRA
ON tblCT_PHIEUMUONTRA.iMaMT = tblPHIEUMUONTRA.iMaMT
WHERE dNgaytra > dNgayhentra
2.Xây dựng các view
1.Tạo view hiện thông tin những độc giả chưa trả sách
CREATE VIEW vvDocGia_ChuaTraSach
AS
SELECT DISTINCT tblTHEDOCGIA.sMathe,sTenDG
FROM dbo.tblTHEDOCGIA INNER JOIN dbo.tblPHIEUMUONTRA
ON tblPHIEUMUONTRA.sMathe = tblTHEDOCGIA.sMathe INNER JOIN
dbo.tblCT_PHIEUMUONTRA
ON tblCT_PHIEUMUONTRA.iMaMT = tblPHIEUMUONTRA.iMaMT
AND sTinhtrang =N'Đang mượn'
2 Tạo view hiện tên những cuốn sách không được mượn vào tháng 12/2020 CREATE VIEW vvSach_Khongduocmuon
AS
SELECT tblCT_PHIEUMUONTRA.sMasach,sTensach
FROM dbo.tblSACH INNER JOIN dbo.tblCT_PHIEUMUONTRA
ON tblCT_PHIEUMUONTRA.sMasach = tblSACH.sMasach INNER JOIN
dbo.tblPHIEUMUONTRA
ON tblPHIEUMUONTRA.iMaMT = tblCT_PHIEUMUONTRA.iMaMT
AND MONTH(dNgaymuon) <>12 AND YEAR(dNgaymuon) <>2020
Trang 223 Tạo view thống kê số lượng nhân viên theo giới tính
CREATE VIEW vvNhanVien_GioiTinh
AS
SELECT CASE bGioitinh
WHEN 1 THEN N'Nam'
ELSE N'Nữ'
END AS [Giới tính],
COUNT(sMaNV) [Số Lượng] FROM dbo.tblNHANVIEN
FROM dbo.tblNXB INNER JOIN dbo.tblSACH
ON tblSACH.sMaNXB = tblNXB.sMaNXB
GROUP BY sTenNXB,sTensach
ORDER BY SUM(iSoluong * fGiatien) DESC
Trang 238.Tạo view cho biết những độc giả có số lần mượn sách từ 2 lần trở lên
CREATE VIEW vvDocGia_Muon_2lan
AS
SELECT tblPHIEUMUONTRA.sMathe,sTenDG
FROM dbo.tblTHEDOCGIA INNER JOIN dbo.tblPHIEUMUONTRA
ON tblPHIEUMUONTRA.sMathe = tblTHEDOCGIA.sMathe
GROUP BY tblPHIEUMUONTRA.sMathe,sTenDG
HAVING COUNT(dbo.tblTHEDOCGIA.sMathe) >= 2
6 Tạo view cho xem danh sách top 3 các đầu sách có số lần mượn nhiều nhấtCREATE VIEW vvTop3_SachMuon_Max
AS
SELECT TOP ( ) sTensach,COUNT(tblSACH.sMasach) AS [Số lần mượn]
FROM dbo.tblSACH INNER JOIN dbo.tblCT_PHIEUMUONTRA
ON tblCT_PHIEUMUONTRA.sMasach = tblSACH.sMasach
GROUP BY sTensach
ORDER BY COUNT(tblSACH.sMasach) DESC
Trang 247 Tạo view hiện những tên sách thuộc NXB 'Phụ nữ'
CREATE VIEW vvTenSach_NXBPhuNu
AS
SELECT sTensach FROM dbo.tblSACH INNER JOIN dbo.tblNXB
ON tblNXB.sMaNXB = tblSACH.sMaNXB
AND sTenNXB = N'Phụ Nữ'
8 Tạo view tính tổng số đầu sách của từng nhà xuất bản
CREATE VIEW vvTongdausach_NXB
AS
SELECT sTenNXB, COUNT(tblSACH.sMaNXB) AS [Tổng đầu sách]
FROM dbo.tblSACH,dbo.tblNXB
WHERE dbo.tblSACH.sMaNXB=dbo.tblNXB.sMaNXB
Trang 2510.Tạo view tính số tiền phạt khi độc giả trả quá hạn,biết quá hạn 1 ngày
phạt 3000 đồng
CREATE VIEW vvTienPhat_Quahan
AS
SELECT tblTHEDOCGIA.sMathe,sTenDG,DATEDIFF(DAY,dNgayhentra,dNgaytra)*3000
AS [Số tiền phạt] FROM tblTHEDOCGIA
INNER JOIN dbo.tblPHIEUMUONTRA ON tblPHIEUMUONTRA.sMathe =
IF NOT EXISTS (SELECT* FROM tblNHANVIEN WHERE sTenNV = @tennv )
PRINT N'Không tìm thấy nhân viên có tên '+@tennv
Trang 262.Tạo thủ tục cho biết tên của những cuốn sách của nhà xuất bản nào đó theo tên nhà xuất bản nhập vào
CREATE PROC pr_Sach_NXB
@TenXB NVARCHAR(30)
AS
BEGIN
IF NOT EXISTS SELECT* FROM tblNXB WHERE sTenNXB = @tenXB )
PRINT N'Không tìm thấy nhà xuất bản có tên '+@tenXB
ELSE
SELECT sTensach, sTacgia
FROM tblSach, tblNXB
WHERE tblSach.sMaNXB=tblNXB.sMaNXB
AND sTenNXB=@TenXB
END
EXEC pr_Sach_NXB @TenXB= N'Kim Đồng'
Test lỗi
EXEC pr_Sach_NXB @TenXB= N'Quà Tặng Cuộc Sống'
3 Tạo thủ tục cho biết số lượng độc giả đã mươn sách trong tháng với tháng
là tham số truyền vào, số lượng là tham số trả về
CREATE PROC pr_docgia_slmuonsachtheothang
WHERE MONTH(dngaybatdau) = @thang
DECLARE @so INT
EXEC pr_docgia_slmuonsachtheothang @thang = 10, @soluongdocgia = @so OUTPUTSELECT @so AS N'số độc giả mượn sách'