TẠO THỦ TỤC LƯU TRỮ BẰNG SQL SERVER... GIÁ TRỊ TRẢ VỀ CỦA THAM SỐ TRONG THỦ TỤC... THỦ TỤC LƯU TRỮ - THAM SỐ GIÁ TRỊ MẶC... THỦ TỤC LƯU TRỮ - THAM SỐ GIÁ TRỊ MẶC FROM sinhvien INNER JOIN
Trang 1CHƯƠNG 5:
LẬP TRÌNH VỚI SQL
TRANSACT-1
Trang 2TH T C L U TR (STORE Ủ Ụ Ư Ữ
PROCEDURE)
2
Trang 4BIẾN CỤC BỘ (TT)
DECLARE @Tên_bi n Ki u_d _li u [, ] ế ể ữ ệ
Ki u d li u text, ntext ho c image không đ c ể ữ ệ ặ ượ
ch p nh n khi khai báo bi n ấ ậ ế
Ví d : ụ Đ khai báo các bi n l u tr giá tr t ng s ể ế ư ữ ị ổ ố
l ng đ t hàng, h tên nhà cung c p, ngày xu t ượ ặ ọ ấ ấ
hàng S d ng l nh DECLARE nh sau: ử ụ ệ ư
DECLARE @Tongsldat INT, @Hotenncc CHAR(50)
DECLARE @Ngayxh DATETIME
Trang 5BIẾN CỤC BỘ (TT) – GÁN GIÁ TRỊ CHO BIẾN
T khóa SET hay SELECT đ ừ ượ c dùng đ gán ể
Trang 6BIẾN CỤC BỘ (TT) – GÁN GIÁ TRỊ CHO BIẾN
Trang 7BIẾN CỤC BỘ (TT) – XEM GIÁ TRỊ HIỆN HÀNH
Trang 9th t c nủ ụ ày có th đ c dể ượ ùng chung gi a cữ ác th t c ủ ụ
khác->gi m th i gian thi t k vả ờ ế ế à th c thi cự ác th t c ủ ụ
Trang 11TẠO THỦ TỤC LƯU TRỮ BẰNG SQL SERVER
Trang 12t ng khi th t c đ c g i ượ ủ ụ ượ ọ
2100 tham s c ố ó th đ c s d ng trong m t th t c l u ể ượ ử ụ ộ ủ ụ ư
Trang 14 2 Lên danh sách nh p đi m thi môn ậ ể c s d li uơ ở ữ ệ cho
các sinh viên h c l p cọ ớ ó mã CDT002 (b sung thêm vổ ào
b ng DIEMTHI cả ác b n ghi v i c t MAMONHOC nh n ả ớ ộ ậ
giá trị CST005, c t MASV nh n giộ ậ á tr l n l t lị ầ ượ à mã các
sinh viên h c l p cọ ớ ó mã CDT002 và các c t đi m lộ ể à
Trang 15TẠO THỦ TỤC LƯU TRỮ BẰNG T-SQL (TT)
Theo cách thông th ng ta s vi t 2 l nh nh sau: ườ ẽ ế ệ ư
INSERT INTO monhoc
L u ý: đây b n có cú pháp câu l nh chèn d li u vào ư ở ạ ệ ữ ệ
m t b ng có tên banga v i d li u l y t b ng có tên ộ ả ớ ữ ệ ấ ừ ả
bangb khác nh sau: ư
INSERT INTO banga (cot1, cot2)
SELECT cot1, cot2 FROM bangb
15
Đây là mã môn học, đã cho trước nên ghi cụ thể ra luôn
Trang 16TẠO THỦ TỤC LƯU TRỮ BẰNG T-SQL (TT)
Thay vì ph i vi t 2 câu l nh nh trên, ta có th đ nh ả ế ệ ư ể ị
nghĩa m t th t c v i các tham s sau @mamh, ộ ủ ụ ớ ố
@tenmh, @sodvht, @malop đ nh p d li u cho ể ậ ữ ệ
Trang 17BEGIN
INSERT INTO monhoc
VALUES(@mamh,@tenmh,@sodvht) INSERT INTO diemthi(mamh,masv)
Trang 18 N u l i g i th t c đ c th c hi n bên trong m t th t c ế ờ ọ ủ ụ ượ ự ệ ộ ủ ụ
khác, bên trong m t trigger hay k t h p v i c ộ ế ợ ớ ác câu l nh ệ
Th t c a c ứ ự ủ ác đ i s đ c truy n cho th t c c ố ố ượ ề ủ ụ ó th ể
không c n ph i tuân theo th t c a c ầ ả ứ ự ủ ác tham s nh khi ố ư
đ nh nghĩa th t c n u t t c c ị ủ ụ ế ấ ả ác đ i s đ c vi t d i ố ố ượ ế ướ
Trang 19VD SỬ DỤNG BIẾN TRONG THỦ TỤC:
CREATE PROC sp_Vidu(@malop1 CHAR(4),@malop2
CHAR(4))
AS
DECLARE @tenlop1 NVARCHAR(30)
DECLARE @namnhaphoc1 INT
DECLARE @tenlop2 NVARCHAR(30)
DECLARE @namnhaphoc2 INT
SELECT @tenlop1=tenlop,@namnhaphoc1=namnhaphoc
FROM lop WHERE malop=@malop1
SELECT @tenlop2=tenlop, @namnhaphoc2=namnhaphoc
FROM lop WHERE malop=@malop2
PRINT @tenlop1+' nhap hoc nam '+str(@namnhaphoc1)
print @tenlop2+' nhap hoc nam '+str(@namnhaphoc2)
Trang 20GIÁ TRỊ TRẢ VỀ CỦA THAM SỐ TRONG THỦ
TỤC
Tr ng h p c n gi l i giá tr c a đ i s sau khi k t thúc ườ ợ ầ ữ ạ ị ủ ố ố ế
th t c, khai báo tham s c a th t c theo cú pháp: ủ ụ ố ủ ủ ụ
@tên_tham_s ki u_d _li u OUTPUT ố ể ữ ệ
Ho c: ặ
@tên_tham_s ki u_d _li u OUT ố ể ữ ệ
Trong l i g i th t c, sau đ i s đ c truy n cho th t c, ờ ọ ủ ụ ố ố ượ ề ủ ụ
cũng ph i ch đ nh thêm t khoá OUTPUT (ho c OUT) ả ỉ ị ừ ặ
CREATE PROCEDURE sp_Conghaiso(
Trang 21GIÁ TRỊ TRẢ VỀ CỦA THAM SỐ TRONG THỦ TỤC
Trang 22THỦ TỤC LƯU TRỮ - THAM SỐ GIÁ TRỊ MẶC
Trang 23THỦ TỤC LƯU TRỮ - THAM SỐ GIÁ TRỊ MẶC
FROM sinhvien INNER JOIN lop
ON sinhvien.malop=lop.malop
WHERE noisinh=@noisinh
ELSE
SELECT hodem,tenFROM sinhvien INNER JOIN lop
ON sinhvien.malop=lop.malop WHERE noisinh=@noisinh AND
tenlop=@tenlop END
Trang 24THỦ TỤC LƯU TRỮ - THAM SỐ GIÁ TRỊ MẶC ĐỊNH
Cho bi t h tên c a các sinh viên sinh t i ế ọ ủ ạ Ngh An ệ :
sp_testDefault @noisinh=N'Ngh An‘ệ
Cho bi t h tên c a các sinh viên l p ế ọ ủ ớ Tin K26 sinh
Trang 25THỦ TỤC LƯU TRỮ - BIÊN DỊCH LẠI THỦ
Trang 26THỦ TỤC LƯU TRỮ - THAY ĐỔI THỦ TỤC
Trang 29 Ch rõ ỉ WITH RECOMPILE v i l nớ ệ EXECUTE
Câu l nh ALTER PROCEDURE đ c s d ng đ ệ ượ ử ụ ể
Trang 30HÀM (FUNCTION)
30
Trang 33 Các hàm thao tác v i t p b n ghi có th đ c ớ ậ ả ể ượ
dùng thay cho tên các b ng trong SQL ả
Các hàm t p h p tính toán cho ra k t qu là m t ậ ợ ế ả ộ
giá tr đ n nh t (ví d tính t ng hay trung bình) ị ơ ấ ụ ổ
Các hàm vô h ng thao tác trên m t giá tr và tr ướ ộ ị ả
v m t giá tr Các hàm này có th đ c dùng ề ộ ị ể ượ
Trang 34HÀM – ĐỊNH NGHĨA HÀM
CREATE FUNCTION tên_hàm ([danh_sách_tham_s ]) ố
RETURNS (ki u_tr _v _c a_hàm)ể ả ề ủ
AS
BEGIN các_câu_l nh_c a_hàmệ ủ
Trang 35SELECT @st=CASE DATEPART(DW,@ngay)
WHEN 1 THEN 'Chu nh t' ậ
WHEN 2 THEN 'Th hai' ứ
WHEN 3 THEN 'Th ba' ứ
WHEN 4 THEN 'Th t ' ứ ư
WHEN 5 THEN 'Th năm' ứ
WHEN 6 THEN 'Th sáu' ứ
Trang 37HÀM – HÀM VỚI GIÁ TRỊ TRẢ VỀ LÀ DỮ LIỆU
KIỂU BẢNG
([danh_sách_tham_số]) RETURNS TABLE
Trong ph n thân c a hàm ch có duy nh t m t câu l nh ầ ủ ỉ ấ ộ ệ
RETURN xác đ nh giá tr tr v c a hàm thông qua duy ị ị ả ề ủ
nh t m t câu l nh SELECT (không s d ng b t kỳ câu ấ ộ ệ ử ụ ấ
l nh nào khác trong ph n thân c a hàm).ệ ầ ủ
Trang 38HÀM – HÀM VỚI GIÁ TRỊ TRẢ VỀ LÀ DỮ LIỆU
KIỂU BẢNG (TT)
Vd: đ nh nghĩa hàm xemsv ị
CREATE FUNCTION func_XemSV(@khoa
SMALLINT) RETURNS TABLE
AS
RETURN(SELECT masv,hodem,ten,ngaysinh FROM sinhvien INNER JOIN lop
Trang 39HÀM – HÀM VỚI GIÁ TRỊ TRẢ VỀ LÀ DỮ LIỆU
Trang 40HÀM – HÀM VỚI GIÁ TRỊ TRẢ VỀ LÀ DỮ LIỆU
Trang 41HÀM – HÀM VỚI GIÁ TRỊ TRẢ VỀ LÀ DỮ LIỆU
FROM (khoa INNER JOIN lop
ON khoa.makhoa=lop.makhoa) INNER JOIN sinhvien
Trang 42HÀM – HÀM VỚI GIÁ TRỊ TRẢ VỀ LÀ DỮ LIỆU
KIỂU BẢNG (TT)
INSERT INTO @bangthongke
SELECT khoa.makhoa,tenkhoa,COUNT(masv) FROM (khoa INNER JOIN lop
ON khoa.makhoa=lop.makhoa)
INNER JOIN sinhvien
ON lop.malop=sinhvien.malop WHERE khoa=@khoa
Trang 43HÀM – HÀM VỚI GIÁ TRỊ TRẢ VỀ LÀ DỮ LIỆU
KIỂU BẢNG (TT)
Câu l nh: ệ
SELECT * FROM dbo.func_TongSV(25)
S cho k t qu th ng kê t ng s sinh viên khoá 25 c a ẽ ế ả ố ổ ố ủ
m i khoa:ỗ
Còn câu l nh: ệ
SELECT * FROM dbo.func_TongSV(0)
Cho ta bi t t ng s sinh viên hi n có (t t c các khoá) ế ổ ố ệ ấ ả
Trang 44TRIGGER
44
Trang 45TRIGGER – TRIGGER LÀ GÌ?
C u trúc g n gi ng nh m t th t c n i t i nh ng ấ ầ ố ư ộ ủ ụ ộ ạ ư
Không có tham s đ u vào và đ u raố ầ ầ
Ph i đ c liên k t v i m t b ng/ b ng o trong CSDLả ượ ế ớ ộ ả ả ả
Trang 46CÁC XỬ LÝ BÊN TRONG TRIGGER
Trang 47CÁC HẠN CHẾ TRÊN TRIGGER
Không đ c t o và tham chi u b ng t m ượ ạ ế ả ạ
Không t o hay thay đ i, xoá c u trúc các đ i t ng ạ ổ ấ ố ượ
Trang 48CÁC LOạI TRIGGER
Có 2 lo i trigger: ạ
Trigger thông th ng: AFTER (FOR) triggerườ
Ch y sau các hành đ ng ki m tra d li u c a các Rule ạ ộ ể ữ ệ ủ
Trang 49CÁC BẢNG TRUNG GIAN INSERTED VÀ
Trang 50LÀM VI C V I TRIGGER Ệ Ớ
50
Trang 51TẠO MỚI TRIGGER
Trigger có th đ c t o b ng câu l nh ho c b ng ể ượ ạ ằ ệ ặ ằ
SQL Server Management Studio
Trong c hai tr ng h p, câu l nh CREATE ả ườ ợ ệ
TRIGGER đ c s d ng đ t o ra trigger ượ ử ụ ể ạ
CREATE TRIGGER Tên_Trigger ON Tên_bảng
{ [ INSTEAD OF ] | [ FOR | AFTER ] }
{ [ INSERT [, UPDATE [,DELETE ] ] ] }
Trang 52MÔ TẢ
Tên b ng ả
Tên b ng mà trigger t o m i s liên k tả ạ ớ ẽ ế
INSTEAD OF: ch đ nh đây là trigger lo i instead of ỉ ị ạ
trigger
M i b ng ch có quy n t o m t instead of trigger cho ỗ ả ỉ ề ạ ộ
m t hành đ ng c p nh tộ ộ ậ ậ
FOR ho c AFTER ặ
N u t o trigger thông th ngế ạ ườ
INSERT, UPDATE, DELETE
Trang 54SỬA NỘI DUNG TRIGGER
S a n i dung ử ộ
ALTER TRIGGER Tên_Trigger ON Tên_bảng
FOR INSERT [, UPDATE [,DELETE ]]
Trang 55TRIGGER LỒNG NHAU
Trigger có th l ng nhau ể ồ
Hành đ ng c p nh t ộ ậ ậ Trigger C p nh t b ng khác ậ ậ ả
Trigger trên b ng t ng ngả ươ ứ
Instead Of trigger không phát sinh l i trên chính b ng ạ ả
C u hình cho phép trigger l ng nhau ấ ồ
EXEC sp_configure 'nested triggers', [0 | 1]
Trang 56TRIGGER - KI M TRA RÀNG BU C Ể Ộ
D LI U Ữ Ệ
56
Trang 57KHI THÊM MỚI MẪU TIN
Th ng dùng đ ki m tra ườ ể ể
Khóa ngo i, Mi n giá tr , Liên thu c tính trong cùng ạ ề ị ộ
m t b ngộ ả
Liên thu c tính c a nhi u b ng khác nhau ộ ủ ề ả
3 lo i đ u tiên, ch dùng trigger n u mu n cung c p ạ ầ ỉ ế ố ấ
các báo l i c th b ng ti ng Vi t ỗ ụ ể ằ ế ệ
N u đã khai báo các ràng bu c này b ng constraintế ộ ằ
Các c u trúc l nh th ng dùng khi ki m tra ấ ệ ườ ể
Trang 58KHI HỦY BỎ MẪU TIN
T ng t , ki m tra các ràng bu c nh trigger ươ ự ể ộ ư
INSERT
Nên ki m tra ràng bu c khoá ngo i ể ộ ạ
Thông th ng ràng bu c này d n đ n vi c ph i c p nh t ườ ộ ẫ ế ệ ả ậ ậ
Trang 59KHI SỬA ĐỔI MẪU TIN
T ng t , ki m tra các ràng bu c nh trigger ươ ự ể ộ ư
Trang 60 H y b d li u do quan h khoá ngo iủ ỏ ữ ệ ệ ạ
Tính l i các c t 'tính toán' trong các b ng liên quanạ ộ ả
V trí th c hi n ị ự ệ
Trong cùng trigger ki m tra ràng bu c đã đ nh nghĩaể ộ ị
Sau khi ki m tra d li u đã h p l (tho mãn các ràng ể ữ ệ ợ ệ ả
Trang 62VÍ DỤ
T o b ng o sau ạ ả ả
Select D.SoDH, NgayDH, MaNhaCC, V.MaVTu, TenVTu,
SoLuong, DonGia From CTDONDH CT, DONDH D, VATTU
V Where CT.SoDH = D.SoDH And CT.MaVTu = V.MaVTu
CREATE TRIGGER tg_vw_CTDONDH_BI
AS
Insert Into DONDH Select SoDH, NgayDH, MaNhaCC
From Inserted Where SoDH Not In (Select SoDH
From DonDH)
Insert Into VATTU(MaVTu, TenVTu) Select MaVTu,
TenVTu From Inserted Where MaVTu Not In (Select
MaVTu From VATTU)
Insert Into CTDONDH Select SoDH, MaVTu, SoLuong,
DonGia From Inserted