Bài giảng Ngôn ngữ lập trình trong hệ quản trị cơ sở dữ liệu SQL server 2012 thông qua bài học này các bạn sẽ nắm được kiến thức về ngôn ngữ lập trình; thủ tục; hàm; bẫy sự kiện.
Trang 1NGÔN NG L P TRÌNH TRONG Ữ Ậ
H QU N TR C S D LI U Ệ Ả Ị Ơ Ở Ữ Ệ
SQL SERVER 2012
Trang 6absolute (giá_trị | biến) |
relative (giá_trị | biến)
• Tr ng thái Cursor ạ
@@fetch_status
=0 : Đang trong dòng d li u (l n đi k ti p thành công) ữ ệ ầ ế ế
≠0 : Ngoài dòng d li u (l n đi k ti p không thành công) ữ ệ ầ ế ế
Trang 7if ((@x % 2) = 0)
set @t = @t + @xset @x = @x + 1
end
Print @t
Trang 8Declare @ma char(5),@ten char(10)
Fetch next from sv into @ma,@ten
While (@@fetch_status = 0)
begin
print @ma + ‘ : ‘ + @ten
Fetch next from sv into @ma,@ten
end
Close sv; Deallocate sv
Trang 9Th t c ủ ụ
(Procedure) là một chương trình trong cơ sở dữ liệu gồm nhiều câu lệnh mà bạn lưu lại cho những lần sử dụng sau Trong SQL Server, bạn có thể truyền các tham số vào procedure, tuy nó không trả về một giá trị cụ thể như function (hàm) nhưng cho biết việc thực thi thành công hay thất bại.
T o l p th t cạ ậ ủ ụ
@tên_tham_số kiểu_dữ_liệu loại [,…n]
Trang 10delete from sinhvien where tp = @tpend
exec xoasinhvien ‘HCM’
Trang 11declare @tong int
exec dem ‘HCM’ , @tong output
print @tong
Trang 12(Function)
T o l p hàmạ ậ
( @tên_tham_số kiểu [,…n] ) returns kiểu_trả_về
Trang 13declare @tong int
set @tong = dbo.dem(‘HCM’)
Trang 14declare @s char(8), @s1 char(6)
set @s = ‘0000’ + cast(@max as char(4))
set @s1 = ‘BA’ + right(rtrim(@s),4)
return @s1
end
Trang 16(ví d table function) ụ
create function laydssv1 (@malop char(5))
returns @btam table(masv char(5),tensv char(20))
as
begin
insert into @btam
select masv,tensv from sinhvien where malop = @malop
return
end
select * from laydssv1('QT1')
Trang 17B y s ki n ẫ ự ệ
(Trigger)
• B y l nh đ ẫ ệ ượ c phát sinh sau nh ng hành vi thêm m i hay ữ ớ thay đ i, xóa trên b ng ổ ả
– Có th h y các c p nh p trên d li u ể ủ ậ ậ ữ ệ
• B y l nh đ ẫ ệ ượ c phát sinh đ thay th nh ng hành vi thêm, ể ế ữ
Trang 18B y s ki n (trigger) ẫ ự ệ
Lo i trigger FOR ạ
18
Lưu vào dữ liệu
Insert | Update | Delete Điểm lưu (lưu thể hiện dữ liệu tại thời điểm hiện tại)
Trang 19B y s ki n (trigger) ẫ ự ệ
Trang 20B y s ki n ẫ ự ệ
(Trigger)
B ng t m cho b y s ki n ả ạ ẫ ự ệ
inserted: L u nh ng thông tin s p đ ư ữ ắ ượ c đ a vào d li u ư ữ ệ
deleted: L u nh ng thông tin đã có và chu n b đ ư ữ ẩ ị ượ c thay th ế
B ng t m có c u trúc gi ng b ng đ t s ki n ả ạ ấ ố ả ặ ự ệ
VD:
C p nh p sinh viên mã ‘BA0002’ v i thành ph ‘HCM’ thành ậ ậ ớ ố
‘HN’
=> Vào b ng inserted là b (‘BA0002’,’aaa’,’HN’) ả ộ
=> Vào b ng deleted là b (‘BA0002’,’aaa’,’HCM’) ả ộ
Trang 21N u c2 đ ế ượ ậ c c p nh t ậ => 0010: k t qu hàm là 2 ế ả
N u c1,c3,c4 đ ế ượ ậ c c p nh t ậ => 1101: k t qu hàm là 13 ế ả
Trang 22B y s ki n ẫ ự ệ
(Trigger)
Thay đ i thông s cho phép đ quy tr c ti p ổ ố ệ ự ế
( Update T1, kích ch y ạ Trigger 1. Trigger 1 ch y ạ update T1 l n n a, kích ầ ữ
ch y ạ Trigger 1…)
Thi t l p gi i h n l ng nhau (đ quy gián ti p) ế ậ ớ ạ ồ ệ ế
( Update T1, kích ch y ạ Trigger 1. Trigger 1 ch y ạ update T2, kích ch y ạ Trigger 2. Trigger 2 ch y ạ update T1, kích ch y ạ Trigger 1. …)
L ng nhau đ ồ ượ ố c t i đa là 32 c p đ ấ ộ
Trang 24B y s ki n ẫ ự ệ
(ví d ) ụ
T o trigger cho b ng sinhvien (masv, tensv, malop) th a ạ ả ỏ
mãn đi u ki n m t l p không quá 20 ng ề ệ ộ ớ ườ i.
Create trigger tssv on sinhvien for
where malop=@malop
if (@ts > 20)
rollback transaction end
Trang 25update sinhvien set trangthai = 1
where masv in (select masv from deleted)
end