Professional Documents
Culture Documents
CSDL - Ch6.Introduce To T-SQL
CSDL - Ch6.Introduce To T-SQL
(2022)
Mục tiêu
Hiểu những khái niệm cơ bản về lập trình với T-SQL
Vận dụng kỹ năng lập trình với Trigger, Cursor và Procedure
(Microsoft SQL Server)
2
Bùi Xuân Huy (2022) Chương 6: T-SQL
Tài liệu tham khảo
Garcia-Molina H., Ullman J. D., & Widom J., Database System: The
complete book, 2nd Edition, Prentice Hall, 2008.
Nguyễn An Tế, Nguyễn Thúy Ngọc & Nguyễn Kiều Oanh, CSDL: Nhập
môn và thực hành, NXB Khoa Học Kỹ Thuật, 2015.
3
Bùi Xuân Huy (2022) Chương 6: T-SQL
CSDL minh họa
THANH_PHO(matp, tentp)
NHAN_VIEN(manv, honv, tennv, ngaysinh, phai, mucluong, macn, manvquanly)
THAN_NHAN(manv, tenthannhan, ngaysinh, phai, moiquanhe)
VPHONG_CN(macn, matp)
CONG_TRINH(mact, tenct, ngaybd, ngaykt, matp, macn)
PHAN_CONG(mact, manv, sogiotuan)
4
Bùi Xuân Huy (2022) Chương 6: T-SQL
Nội dung
1. Biến
3. TRIGGER
6. Store Procedure
5
Bùi Xuân Huy (2022) Chương 6: T-SQL
1. Biến
Đặt tên
● quy tắc
● có thể gán giá trị ban đầu cho biến khi khai báo
6
Bùi Xuân Huy (2022) Chương 6: T-SQL
1. Biến
7
Bùi Xuân Huy (2022) Chương 6: T-SQL
1. Biến (tt.)
Hiển thị giá trị của biến hay của biểu thức
PRINT @mucluong; /* hiện giá trị của biến @mucluong ra màn hình
PRINT (‘Hello! How are you! ’); /*hiện thông điệp ra màn hình
Gán giá trị cho biến bằng hằng số hay biểu thức
Gán giá trị cho biến từ 1 dòng trong table bằng lệnh SELECT
FROM NHAN_VIEN
WHERE…. Biến
Để sử dụng câu lệnh này, kiểu dữ liệu của biến phải giống với
kiểu dữ liệu của thuộc tính cần lấy giá trị.
9
Bùi Xuân Huy (2022) Chương 6: T-SQL
Nội dung
1. Biến
3. TRIGGER
6. Store Procedure
10
Bùi Xuân Huy (2022) Chương 6: T-SQL
1.2 Cấu trúc điều khiển IF
BEGIN
Các lệnh trong block
...
END
11
Bùi Xuân Huy (2022) Chương 6: T-SQL
1.2 Cấu trúc điều khiển IF(tt.)
12
Bùi Xuân Huy (2022) Chương 6: T-SQL
1.2 Cấu trúc điều khiển IF(tt.)
Rẽ nhánh có nhiều điều kiện: cấu trúc IF lồng nhau
13
Bùi Xuân Huy (2022) Chương 6: T-SQL
1.2 Cấu trúc điều khiển IF (tt.)
14
Bùi Xuân Huy (2022) Chương 6: T-SQL
Nội dung
1. Biến
3. TRIGGER
6. Store Procedure
15
Bùi Xuân Huy (2022) Chương 6: T-SQL
3. TRIGGER
Trigger: hành động (Action – A) được tự động thực hiện khi 1
biến cố (Event – E) xảy ra và khi 1 điều kiện (Condition – C)
được thỏa mãn Thêm, sửa, xóa
dòng dữ liệu/xóa
giá trị của thuộc
thêm, tính = sửa
biến cố sửa,
(trước / sau) xóa
END
16
Bùi Xuân Huy (2022) Chương 6: T-SQL
3. TRIGGER (cont.)
17
Bùi Xuân Huy (2022) Chương 6: T-SQL
3. TRIGGER (cont.)
Đối với mỗi công trình, ngày bắt đầu luôn luôn nằm trước
(nhỏ hơn) ngày kết thúc.
● Ôn lại:
Nếu không xem đây là một ràng buộc cần kiểm soát thì điều gì sẽ
xảy ra khi thêm/xóa/sửa dữ liệu.
Đây là ràng buộc loại mấy. Cần kiểm soát thao tác nào và thuộc
tính nào (bảng TAH)?
18
Bùi Xuân Huy (2022) Chương 6: T-SQL
3. TRIGGER (cont.)
19
Bùi Xuân Huy (2022) Chương 6: T-SQL
3. TRIGGER (cont.)
20
Bùi Xuân Huy (2022) Chương 6: T-SQL
3. TRIGGER (cont.)
21
Bùi Xuân Huy (2022) Chương 6: T-SQL
3. TRIGGER (cont.)
22
Bùi Xuân Huy (2022) Chương 6: T-SQL
3. TRIGGER (cont.)
23
Bùi Xuân Huy (2022) Chương 6: T-SQL
3. TRIGGER (cont.)
Bài tập:
Mỗi công trình không được phân công quá bốn người làm việc.
24
Bùi Xuân Huy (2022) Chương 6: T-SQL
3. TRIGGER (cont.)
Bài tập:
Mỗi công trình không được phân công quá bốn người làm việc.
25
Bùi Xuân Huy (2022) Chương 6: T-SQL
3. TRIGGER (cont.)
Bài tập:
Trưởng phòng phải làm việc tại chi nhánh mình đang phụ trách.
Thuộc tính khóa chính kiểu char vẫn có thể bị xóa? Tại sao?
-> viết trigger để điều này không xảy ra (làm trên bảng
NHAN_VIEN, các bảng khác tương tự)
26
Bùi Xuân Huy (2022) Chương 6: T-SQL
3. TRIGGER (cont.)
Bài tập: Trưởng phòng phải làm việc tại chi nhánh mình đang phụ
trách.
27
Bùi Xuân Huy (2022) Chương 6: T-SQL
3. TRIGGER (cont.)
Xóa N01
Không báo lỗi
28
Bùi Xuân Huy (2022) Chương 6: T-SQL
3. TRIGGER (cont.)
29
Bùi Xuân Huy (2022) Chương 6: T-SQL
3. TRIGGER (cont.)
Xóa TRIGGER
30
Bùi Xuân Huy (2022) Chương 6: T-SQL
Nội dung
1. Biến
3. TRIGGER
6. Store Procedure
31
Bùi Xuân Huy (2022) Chương 6: T-SQL
4. Lập trình với Cursor
32
Bùi Xuân Huy (2022) Chương 6: T-SQL
4. Lập trình với Cursor (cont.)
● Thực hiện:
Tạo một bảng BHXH_NAM với cấu trúc như trên
Duyệt qua từng dòng trong bảng nhân viên, nếu là nam thì ghép
honv và tennv, tính bhxh và chuyển dữ liệu vào bảng BHXH_NAM
33
Bùi Xuân Huy (2022) Chương 6: T-SQL
4. Lập trình với Cursor (cont.)
Dùng lệnh SQL để tính mức thưởng dựa trên tổng số giờ làm
việc cho các công trình
34
Bùi Xuân Huy (2022) Chương 6: T-SQL
4. Lập trình với Cursor (cont.)
Dùng lệnh SQL để tính tính chi tiết đơn hàng như sau
35
Bùi Xuân Huy (2022) Chương 6: T-SQL
4. Lập trình với Cursor (cont.)
Dùng lệnh SQL để truy vấn dữ liệu như sau:
36
Bùi Xuân Huy (2022) Chương 6: T-SQL
4. Lập trình với Cursor (cont.)
Cursor (con trỏ): cơ chế truy xuất TỪNG DÒNG của table
37
Bùi Xuân Huy (2022) Chương 6: T-SQL
4. Lập trình với Cursor (cont.)
38
Bùi Xuân Huy (2022) Chương 6: T-SQL
4. Lập trình với Cursor (cont.)
39
Nguyễn An Tế (2018) Chương 7: Lập trình với cursors
4. Lập trình với Cursor (cont.)
R2
● <điều hướng>: R3
NEXT (default),
PRIOR, FIRST, LAST, R4
ABSOLUTE
LAST 32
RELATIVE
PRIOR
FIRST
NEXT
40
Nguyễn An Tế (2018) Chương 7: Lập trình với cursors
4. Lập trình với Cursor (cont.)
41
Nguyễn An Tế (2018) Chương 7: Lập trình với cursors
4. Lập trình với Cursor (cont.)
42
Nguyễn An Tế (2018) Chương 7: Lập trình với cursors
4. Lập trình với Cursor (cont.)
● Thực hiện:
Tạo một bảng BHXH_NAM với cấu trúc như trên
Duyệt qua từng dòng trong bảng nhân viên, nếu là nam thì ghép
honv và tennv, tính bhxh và chuyển dữ liệu vào bảng BHXH_NAM
43
Bùi Xuân Huy (2022) Chương 6: T-SQL
4. Lập trình với Cursor (cont.)
Bài tập:
44
Bùi Xuân Huy (2022) Chương 6: T-SQL
Nội dung
1. Biến
3. TRIGGER
6. Store Procedure
45
Bùi Xuân Huy (2022) Chương 6: T-SQL
5. Một số vấn đề mở rộng.
46
Bùi Xuân Huy (2022) Chương 6: T-SQL
5. Một số vấn đề mở rộng (cont.)
47
Bùi Xuân Huy (2022) Chương 6: T-SQL
Nội dung
1. Biến
3. TRIGGER
6. Store Procedure
48
Bùi Xuân Huy (2022) Chương 6: T-SQL
6. Store Procedure
Là một đoạn chương trình viết bằng T-SQL nhằm thực thi một
hoặc nhiều tác vụ cụ thể
● Module hóa: viết một lần, dùng nhiều lần trong các ứng dụng.
49
Bùi Xuân Huy (2022) Chương 6: T-SQL
6. Store Procedure (cont.)
Tạo, sửa đổi thủ tục
50
Bùi Xuân Huy (2022) Chương 6: T-SQL
6. Store Procedure (cont.)
Ví dụ: thủ tục không có tham biến
EXEC PRC_TINHBHXH_NAM
51
Bùi Xuân Huy (2022) Chương 6: T-SQL
6. Store Procedure (cont.)
- Nếu chỉ muốn viết 1 thủ tục, nhưng mỗi lần thực thi, người dùng
cần tính BHXH cho Nam hoặc cho Nữ thì sẽ có kết quả tương
ứng?
CREATE PROCEDURE PRC_TINHBHXH @gioitinh NVARCHAR(3)
AS
BEGIN
/** ??? Tên thủ tục
END
Tham biến
EXEC PRC_TINHBHXH @gioitinh = N’Nam’
53
Bùi Xuân Huy (2022) Chương 6: T-SQL
Thảo luận
54
Bùi Xuân Huy (2022) Chương 6: T-SQL