CHƯƠNG 4: ỨNG DỤNG 4.1 Synonym
4.1.1 Cú pháp synonym
Tạo
CREATE Synonym synonym_name FOR schema.object_name
Xóa
Drop synonym synonym_name
4.1.2 Áp dụng
Ví dụ 1: Tạo tên đồng nghĩa có tên bất kỳ truy xuất vào bảng Nhanvien do người dùng dbo làm chủ sỡ hữu
53 | P a g e --Thực thi select* from nv Kết quả Hình 4. 1: Kết quả thực thi
-- Xóa tên đồng nghĩa
dropsynonym nv
Kết quả
Hình 4. 2: Kết quả xóa synonym
Ví dụ 2: Tạo tên đồng nghĩa có tên bất kỳ truy xuất vào bảng Khachhang do người dùng dbo làm chủ sỡ hữu
createsynonym kh for dbo.Khachhang
--Thực thi
select *
from kh
54 | P a g e
Hình 4. 3: Kết quả thực thi
--Xóa
dropsynonym kh
Kết quả
Hình 4. 4: Kết quả xóa synonym4.2 Index 4.2 Index
4.2.1 Cú pháp Index
CREATE clustered INDEX index_name ON Table_name ( column )
4.2.2 Áp dụng
Ví dụ 1:Tạo chỉ mục có tên INDEX_Sanpham trên cột MaSP của bảng Sanpham
CREATEindex INDEX_Sanpham on Sanpham(MaSP)
--Thực thi
55 | P a g e
From Sanpham
Where MaSP='SP01'
Kết quả
Hình 4. 5: Kết quả thực thi
Ví dụ 2: Tạo chỉ mục có tên bất kỳ trên cột Diachi của bảng Khachhang
CREATEindex INDEX_Khachhang on Khachhang(Diachi)
--Thực thi
select *
from Khachhang
with (index( INDEX_Khachhang))
where Diachi= N'41 Xóm củi'
Kết quả:
Hình 4. 6: Kết quả thực thi
4.3 View
4.3.1 Cú pháp view
Create view view_Ten as Select cột 1, cột 2 … From tên bảng
56 | P a g e
Where <điều kiện>;
4.3.2 Áp dụng
Ví dụ 1:Tạo vw DanhSachNhanVienNam với các thông tin gồm: mã nhân viên, họ tên nhân viên, ngày sinh của các nhân viên nữ
CREATEVIEW VW_DSNVNam as SELECT MANV,HoTen,NGAYSINH FROM Nhanvien where GioiTinh=0 --Thực thi select* from VW_DSNVNam Kết quả: Hình 4. 7: Kết quả thực thi
Ví dụ 2: Tạo view vwNhanVien với các thông tin: mã nhân viên, họ, tên nhân viên, tuổi nhân viên có độ tuổi từ 25 đến 30 tuổi
createview vw_Nhanvien as
select MaNV, HoTen, NgaySinh, year(getdate())- year(Ngaysinh) as Tuoi
from Nhanvien
whereyear(getdate())- year(Ngaysinh) between 25 and 30
57 | P a g e
select *
from vw_Nhanvien
Kết quả:
Hình 4. 8: Kết quả thực thi
Ví dụ 3:Tạo view vwDsXuathang2020 với các thông tin: Số phiếu xuất, mã nhân viên, của các phiếu xuất ngày bán được lập năm 2020
createview vw_DSXuatHang2020 as select px.SoPX,MaNV,Ngayban
from Phieuxuat px
whereyear(NgayBan) =2020
groupby px.SoPX,MaNV,Ngayban --Thực thi seLECT * from vw_DSXuatHang2020 Kết quả: Hình 4. 9: Kết quả thực thi
Ví dụ 4: Tạo view vwTriGiaHoaDonvới các thơng tin: Số phiếu nhập, mã sản phẩm, Tổng trị giá hóa đơn(giá bán x số lượng)của một sản phẩm
58 | P a g e
createview VW_TGHDon as
select Soluong,Gianhap,sum(Soluong*Gianhap) as TriGiaHD,SoPN,MaSP
from CTPhieunhap where MaSP=N'SP01' groupby Soluong,Gianhap,SoPN,MaSP --Thực thi select * from VW_TGHDon Kết quả: Hình 4. 10: Kết quả thực thi 4.4 Store Proceduce 4.4.1 Cú pháp Store Proceduce Create Proc<sp_name> [<cácthamsốhìnhthức>]
[With Recompile | Encryption | Recompile, Encryption] As
[Declare biếncụcbộ] [Begin]
<Cácphátbiểu> [End]
59 | P a g e Recompile: Biên dịch lại thủ tục mỗi lần thủ tục được thực thi
Execute As Clause: Thực thi gọi các thủ tục hoặc hàm khác
For Replication: Nhân bản dữ liệu. Khi dùng với từ khóa này khơng được khai báo các tham số
4.4.2 Áp dụng
Ví dụ 1: Xem thơng tin khách hàng với mã khách hàng do người dùng nhập
create proc pr_TTKhachHang_MAKhH(@MaKH nvarchar (6))
as begin
if exists(select MaKH from Khachhang where MaKH=@MaKH)
begin
select MaKH,TenKH,DiaChi,NgaySinh,SoDT
from Khachhang
where MaKH=@MaKH
groupby MaKH,TenKH,DiaChi,NgaySinh,SoDT
print 'Thơng tin khách hàng có mã'+@MaKH+'Là:'
end else
print N'Mã khách hàng này không tồn tại'
end
--Thực thi
exec pr_TTKhachHang_MaKhH'KH02'
Kết quả:
60 | P a g e
--Thực thi
exec pr_TTKhachHang_MAKhH'KH010'
Kết quả:
Hình 4. 12: Kết quả thực thi
Ví dụ 2: Xem đơn giá của một sản phẩm với mã sản phẩm do người dùng nhập
createproc pr_dongia_MaSP(@MaSP nchar(6))
as begin
if exists( select MaSP from Sanpham where MaSP= @MaSP)
begin
select MaSP, TenSP, MaloaiSP,Donvitinh, Ghichu
from Sanpham
where MaSP=@MaSP
groupby MaSP, TenSP, MaloaiSP,Donvitinh, Ghichu
end else
print N' Mặt hàng này không tồn tại'
end
--Thực thi
exec pr_dongia_MaSP'SP03'
Kết quả:
61 | P a g e
Ví dụ 3: Tạo thủ tục xóa một khách hàng trong bảng KhachHang với tham số mã khách hàng do người dùng nhập và xác định giao dịch hoàn thành hoặc quay lại khi giao dịch có lỗi
createproc sp_delete_ThongTinKhachHang(@MaKhachHang nchar (6))
as
if exists(select *
from Khachhang
where MaKH = @MaKhachHang)
begintran
deletefrom Khachhang
where MaKH = @MaKhachHang
committran if@@ERROR <>0
rollbacktran
Kết quả:
Hình 4. 14: Kết quả tạo proc
Ví dụ 4: Thủ tục thống kê ngày sinh đối với mỗi nhân viên với tham số truyền vào là 1 ngày khoảng thời gian ngày sinh (từ ngày, đến ngày). Thủ tục liệt kê mã nhân viên, họ tên nhân viên, ngày sinh, SDT, địa chỉ.
Createproc sp_ThongKeNgaySinhNV @tungay datetime, @denngay datetime As
Select MaNV, HoTen, NgaySinh, DienThoai, DiaChi
From Nhanvien
Where NgaySinh>=@tungay and NgaySinh<=@denngay
62 | P a g e
--Thực thi
exec sp_ThongKeNgaySinhNV'01/01/1980' , '01/01/1990'
Kết quả:
Hình 4. 15: Kết quả thực thi
Ví dụ 5: Viết thủ tục cho biết danh sách các nhân viên nơi sinh ở TP.HCM
Createproc proc_Nhanvien
As Select * From Nhanvien Where NoiSinh='TP.HCM' --Thực thi exec proc_Nhanvien Kết quả: Hình 4. 16: Kết quả thực thi
Ví dụ 6: Xem thơng tin nhân viên gồm mã nhân viên, họ tên, ngày sinh, ngày vào làm theo khoảng thời gian từ ngày đến ngày do người dùng yêu cầu.
createproc pr_thongtinnhanvien1(@NgayBatDau NCHAR(10), @NgayKetThuc
NCHAR (10))
as begin
63 | P a g e
if EXISTS(select NgayVaoLam from Nhanvien where @NgayKetThuc >=NgayVaoLam and NgayVaoLam>= @NgayBatDau)
begin
select MaNV, HoTen, NgaySinh, NgayVaoLam
from Nhanvien
where @NgayKetThuc>= NgayVaoLam and NgayVaoLam>= @NgayBatDau
groupby MaNV, HoTen, NgaySinh, NgayVaoLam
end else
print N'Ngày vào làm không hợp lệ'
end -- thực thi exec pr_thongtinnhanvien1'2018-04-15 00:00:00.0000000', '2018-06-15 00:00:00.0000000' exec pr_thongtinnhanvien1'2016-08-08 00:00:00.0000000', '2018-05-03 00:00:00.0000000' Kết quả: Hình 4. 17: Kết quả thực thi 4.5 Function 4.5.1 Cú pháp function
Create Function Tên_hàm [(Khai báo các tham số)] Returns Kiểu_dữ_liệu_trả_về
64 | P a g e Begin Các_câu_lệnh Return End 4.5.2 Áp dụng
Ví dụ 1:Viết hàm cho biết số lượng đơn đặt hàng với tham số truyền vào là mã nhân viên
CREATEFUNCTION F_SL_MANV(@MaNV NCHAR(6))
RETURNSINT AS
BEGIN
DECLARE @SoLuong INT
SELECT @SoLuong= COUNT(SoPX) FROM Phieuxuat WHERE MaNV =@MaNV
GROUPBY MaNV
RETURN @SoLuong
END
--Xóa
dropfunction F_SL_MANV
--Thực thi
select dbo. F_SL_MANV('NV05')
-- Thực thi c2
print N'số lượng đơn hàng của nhân viên mã số NV05 là: '+ convert(varchar, dbo.F_SL_MANV('NV05'))
65 | P a g e
Hình 4. 18: Kết quả thực thi
Ví dụ 2: Viết hàm xem danh sách các sản phẩm theo Loại sản phẩm (trả về dạng bảng)
CREATEFUNCTION F_DANHSACHSANPHAM(@LoaiSP NvarCHAR(50))
returnstable as
return (select *from Sanpham where MaloaiSP = @LoaiSP)
--Thực thi
select * from F_DANHSACHSANPHAM('BG01')
Kết quả:
Hình 4. 19: Kết quả thực thi 4.6 Trigger
4.6.1 Cú pháp trigger
Create Trigger [ schema_name . ] trigger_name
On { table | view } [ With [ Encryption | Exxcute As Clause ]] {
For | After | Instead Of } { [ Insert ] [ , ] [Update ] [ , ] Delete] } [ Not For Replication] As { sql_statement [ ; ] [ ,...n ]
66 | P a g e
4.6.2 Áp dụng
Ví dụ 1: Số lượng nhập của mỹ phẩm phải lớn hơn hoặc bằng 0
Createtrigger tg_SoLuongnhap
On CTPhieunhap
ForInsert, Update
As
If exists(Select * From inserted Where inserted.Soluong<0)
Begin
print(N'Số lượng nhập phải lớn hơn hoặc bằng 0')
rollbacktran End
--Trigger được kích hoạt khi có lệnh Update vào bảng CTphieunhap
Update CTPhieunhap Set Soluong= 10 Where SoPN='PN005' Kết quả: Hình 4. 20: Kết quả thực thi Kết quả
67 | P a g e
Hình 4. 21: Kết quả update_trigger
Ví dụ 1: Số lượng nhập phải lớn hơn 10 và nhỏ hơn 25
CreateTrigger tg_SoLuongnhaphang3
On CTphieunhap
ForInsert, Update
As
If exists(Select * From inserted
Where inserted.Soluong<10 or inserted.Soluong >25) Begin
68 | P a g e
Print(N'Số lượng nhập hàng phải lớn hơn 10 và nhỏ hơn 25') rollbacktran
End
--Trigger được kích hoạt khi có lệnh Update vào bảng CTphieunhap
Update CTphieunhap Set SoLuong=12 Where MaSP=N'SP04' Kết quả Hình 4. 22: Kết quả thực thi Kết quả
69 | P a g e
Hình 4. 23: Kết quả update_ trigger4.7 User 4.7 User
4.7.1 Cú pháp tạo user và cấp quyền
sp_adduser[ @loginame= ] 'login' [ , [ @name_in_db= ] 'user' ] [ , [ @grpname = ] 'group' ]
1. Tạo tài khoản đăng nhập:
Cách1: Create login tên_login with password = 'mật_khẩu' Cách 2: sp_addlogin 'tên_login','mật_khẩu'
70 | P a g e
2. Tạo người dùng:
Cách 1: Create user tên_user for login tên_login Cách 2: sp_adduser 'tên_login','tên_user'
3. Cấp quyền cho người dùng
Grant danh_sách_quyền on tên_bảng to tên_user [with grant option]
4.7.2 Áp dụng
Ví dụ 1: Cấp quyền xem và thêm dữ liệu trên bảng KhachHang cho Yennhi trên CSDL QLBHMPham3 Các bước thực hiện
Createlogin Yennhi withpassword = '123456', default_database = QLBHMPham3
Createuser Yennhi forlogin Yennhi
Grantselect,insert on Khachhang to Yennhi
71 | P a g e
Hình 4. 24: Tạo tài khoản user
Ví dụ 2: Cấp quyền xem, thêm và xóa dữ liệu trên bảng Nhanvien cho ThanhTuyen123 trên CSDL QLBHMPham3 Các bước thực hiện:
Createlogin ThanhTuyen123 withpassword = '56789', default_database = QLBHMPham3
Createuser ThanhTuyen123 forlogin ThanhTuyen123
Grantselect, insert, deleteon Nhanvien to ThanhTuyen123
72 | P a g e
Hình 4. 25: Tạo tài khoản user4.8 Reporting Sevices/ Power View… 4.8 Reporting Sevices/ Power View…
KẾT LUẬN
Những kết quả đạt được qua việc báo cáo đồ án:
Tìm hiểu cách cài đặt cũng như cách thực hiện và hoạt động SQL Server Management Studio 2017.
Xây dựng cơ sở dữ liệu quản lý cửa hàng mỹ phẩm Beauty Garden trên hệ quản trị CSDL SQL Server Management Studio.
73 | P a g e Truy xuất dữ liệu trên hệ quản trị CSDL quản lý cửa hàng mỹ phẩm Beauty
Garden trên SQL Server Management Studio bằng các lệnh truy vấn.
Tìm hiểu về cú pháp và cách sử dụng Synonym, Index, View, Stored Procedured, Functions, Trigger, User…. Áp dụng vào cơ sở dữ liệu quản lý cửa hàng mỹ phẩm Beauty Garden.
Những điểm hạn chế của đồ án:
Hệ thống dữ liệu chưa thực sự đầy đủ và thực tế.
Mức độ chi tiết và liên kết trong các bảng còn chưa cao.
74 | P a g e
TÀI LIỆU THAM KHẢO
123doc. (2015, 11 05). Retrieved from 123doc.vn: https://123docz.net/document/752492- mo-ta-he-thong-quan-ly-ban-hang.htm
DOCEYE. (2017). Retrieved from Doceye.vn: https://doceye.vn/tin-tuc/noi-dung/cac- buoc-de-thuc-hien-quy-trinh-quan-ly-kho-hieu-qua-chuyen-nghiep-21519.html Gocnhinso. (2020). Retrieved from Gocnhinso.vn: https://gocnhinso.com/tong-quan-sql-