Professional Documents
Culture Documents
Triger 2
Triger 2
Triger 2
BIN CC B
Bin l mt i tng c th cha d liu
D liu c th a vo cc cu lnh SQL dng cc b
Tn cc bin cc b phi bt u bng @
T kha SET hay SELECT c dng gn gi tr cho
bin cc b.
BIN CC B (TT)
DECLARE @Tn_bin Kiu_d_liu [, ...]
Kiu d liu text, ntext hoc image khng c chp nhn
khi khai bo bin
V d: khai bo cc bin lu tr gi tr tng s lng
t hng, h tn nh cung cp, ngy xut hng. S dng
lnh DECLARE nh sau:
V d:
TH TC LU TR
Tp hp bin dch cc cu lnh T-SQL c lu tr vi mt
tn xc nh
S dng thc hin cc nhim v qun tr, hoc p dng
cc lut giao dch phc tp
C hai loi th tc lu tr:
TH TC LU TR - LI CH
Modular programming:
S nht qun.
Ci thin s bo mt:
NH NGHA TH TC LU TR BNG
EM
NH NGHA TH TC LU TR BNG EM
(TT)
Tn th tc
Ni dung th tc
(thn th tc)
10
TO TH TC LU TR BNG T-SQL
Cc th tc lu tr c quyn truy cp ti tt c cc i
tng khi th tc c gi.
2100 tham s c th c s dng trong mt th tc lu tr.
Tham s bt u bi @, cn ch ra kiu dliu ca tham s
C th to lp nhiu bin cc b trong th tc
Dung lng ti a ca th tc lu tr l 128 MB.
11
12
13
y l m
mn hc,
cho trc
nn ghi c
th ra lun
15
16
Li gi th tc c dng:
<tn_th_tc> [<danh_sch_cc_i_s>]
17
18
GI TR TR V CA THAM S TRONG TH
TC
Trng hp cn gi li gi tr ca i s sau khi kt thc th tc,
khai bo tham s ca th tc theo c php:
@tn_tham_s kiu_d_liu OUTPUT
Hoc:
@tn_tham_s kiu_d_liu OUT
Trong li gi th tc, sau i s c truyn cho th tc, cng
phi ch nh thm t kho OUTPUT (hoc OUT)
CREATE PROCEDURE sp_Conghaiso(
@a
INT,
@b
INT,
@c
INT OUTPUT)
AS
SELECT @c=@a+@b
19
GI TR TR V CA THAM S TRONG TH
TC (TT)
20
TH TC LU TR - THAM S GI TR MC
NH
<gi_tr_mc_nh>
21
TH TC LU TR - THAM S GI TR MC
NH
CREATE PROC sp_TestDefault(
AS
BEGIN
@tenlop NVARCHAR(30)=NULL,
@noisinh NVARCHAR(100)='Hu')
IF @tenlop IS NULL
SELECT hodem,ten
FROM sinhvien INNER JOIN lop
ON sinhvien.malop=lop.malop
WHERE noisinh=@noisinh
ELSE
SELECT hodem,ten
FROM sinhvien INNER JOIN lop
ON sinhvien.malop=lop.malop
WHERE noisinh=@noisinh AND
tenlop=@tenlop
END
22
TH TC LU TR - THAM S GI TR MC NH
(TT)
sp_testdefault
sp_testDefault @noisinh=N'Ngh An
23
TH TC LU TR - BIN DCH LI TH TC
Cc th tc lu tr c bin dch li phn nh s thay
i ti cc ch s
C ba cch bin dch li cc th tc:
24
TH TC LU TR - THAY I TH TC LU TR
Cu lnh ALTER PROCEDURE c s dng sa mt
th tc lu tr
C php ging nh lnh CREATE PROCEDURE
S thay i ny vn gi li cc quyn ngi dng
Cp:
25
TH TC LU TR - XA TH TC
26
TH TC LU TR - TNG KT
Mt th tc lu tr l mt nhm cc cu lnh SQL c
bin dch li.
Ngi pht trin CSDL hoc ngi qun tr h thng vit
th tc chy cc nhim v qun tr thng thng, hoc
ng dng cc lut giao dch phc tp. Th tc lu tr
cha cc thao tc hoc cc cu lnh truy vn d liu.
Cc th tc lu tr tng tc thc thi ca truy vn, h tr
truy cp d liu nhanh, h tr vic lp trnh theo m un,
duy tr tnh nht qun, v tng tnh bo mt.
27
TH TC LU TR - TNG KT (TT)
28
HM
Hm l i tng c s d liu tng t nh th tc.
im khc bit gia hm v th tc:
29
HM
Hm gm 3 loi:
Cc hm thao tc tp hp
Hm thao tc bn ghi
Hm v hng
30
HM
31
HM NH NGHA HM
32
HM NH NGHA HM (TT)
CREATE FUNCTION thu(@ngay DATETIME)
NVARCHAR(10)
AS
BEGIN
DECLARE @st NVARCHAR(10)
SELECT @st=CASE DATEPART(DW,@ngay)
WHEN 1 THEN 'Chu nht'
WHEN 2 THEN 'Th hai'
WHEN 3 THEN 'Th ba'
WHEN 4 THEN 'Th t'
WHEN 5 THEN 'Th nm'
WHEN 6 THEN 'Th su'
ELSE 'Th by' END
RETURN (@st) /* Tr tr v ca hm */
END
RETURNS
33
HM S DNG HM
SELECT
masv,
hodem,
dbo.thu(ngaysinh), ngaysinh
FROM sinhvien
WHERE malop=C24102
ten,
34
HM HM VI GI TR TR V L D LIU KIU
BNG
CREATE
FUNCTION
([danh_sch_tham_s]) RETURNS TABLE
AS
RETURN (cu_lnh_select)
tn_hm
Qui tc:
Kiu tr v ca hm c ch nh bi mnh RETURNS
TABLE.
Trong phn thn ca hm ch c duy nht mt cu lnh RETURN
xc nh gi tr tr v ca hm thng qua duy nht mt cu lnh
SELECT (khng s dng bt k cu lnh no khc trong phn
thn ca hm).
35
HM HM VI GI TR TR V L D LIU KIU
BNG (TT)
36
HM HM VI GI TR TR V L D LIU KIU
BNG (TT)
37
HM HM VI GI TR TR V L D LIU KIU
BNG (TT)
Lu :
Cu trc bng tr v bi hm c xc nh da vo
nh ngha ca bng trong mnh RETURNS.
Bin @<bin_bng> trong mnh RETURNS c
phm vi s dng trong hm v c s dng nh mt
tn bng.
Cu lnh RETURN trong thn hm khng ch nh gi
tr tr v. Gi tr tr v ca hm chnh l cc dng d
liu trong bng c tn l @<binbng> c nh
ngha trong mnh RETURNS
38
HM HM VI GI TR TR V L D LIU KIU
BNG (TT) V D
CREATE FUNCTION
@bangthongke TABLE
Func_Tongsv(@khoa
(
makhoa
NVARCHAR(5),
tenkhoa
NVARCHAR(50),
tongsosv
INT
SMALLINT)
RETURNS
) AS
BEGIN
IF @khoa=0
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
GROUP BY khoa.makhoa,tenkhoa
ELSE
39
HM HM VI GI TR TR V L D LIU KIU
BNG (TT)
40
HM HM VI GI TR TR V L D LIU KIU
BNG (TT)
Cu lnh:
SELECT * FROM dbo.func_TongSV(25)
S cho kt qu thng k tng s sinh vin kho 25 ca mi khoa:
Cn cu lnh:
SELECT * FROM dbo.func_TongSV(0)
Cho ta bit tng s sinh vin hin c (tt c cc kho) ca mi
khoa
41
TRIGGER TRIGGER L G?
Khai bo s dng
Kt hp vi cc hnh ng INSERT/UPDATE/DELETE trn
bng hay bng o
Khi to ra, tham gia vo transaction khi to bi cu lnh cp
nht d liu tng ng
42
CC X L BN TRONG TRIGGER
Ch nh cc by li d hiu
Tng tnh thn thin ca ng dng
D dng nhn ra cc li khi lp trnh
43
CC HN CH TRN TRIGGER
Khng c to v tham chiu bng tm
Khng to hay thay i, xo cu trc cc i tng sn c
trong CSDL
CREATE/ALTER/DROP
GRAND/REVOKE
44
CC LOI TRIGGER
INSTEAD OF trigger
Chy trc cc hnh ng kim tra d liu
D liu cha h b thay i
C th thay th hnh ng cp nht d liu bng cc hnh ng khc
45
Inserted
Cha d liu c thm mi trong hnh ng
INSERT/UPDATE
C c hai loi trigger
Cu trc bng ging vi bng thc s c cp nht d liu
Deleted
Cha d liu b xo trong hnh ng DELETE/UPDATE
C c hai loi trigger
Cu trc bng ging vi bng thc s c cp nht d liu
46
LM VIC VI TRIGGER
47
TO MI TRIGGER
Trigger c th c to bng cng c Enterprise Manager,
hoc Query Analyzer.
Trong c hai trng hp, cu lnh CREATE TRIGGER
c s dng to ra trigger.
CREATE
Bin_cc_b]
Cc_lnh
48
M T
Tn bng
49
XA TRIGGER
C php
DROP TRIGGER
Tn_trigger
50
SA NI DUNG TRIGGER
Sa ni dung
ALTER
Bin_cc_b]
Cc_lnh
51
S cp lng ti a
32 cp
S dng bin @@NestedLevel
EXEC
52
54
KHI HY B MU TIN
Tng t, kim tra cc rng buc nh trigger INSERT
Nn kim tra rng buc kho ngoi
55
KHI SA I MU TIN
Xc nh ct ang c cp nht
If Update(Tn_ct)
X l
56
TRIGGER CP NHT GI TR T NG
V tr thc hin
Trong cng trigger kim tra rng buc nh ngha
Sau khi kim tra d liu hp l (tho mn cc rng buc)
57
INSTEAD OF TRIGGER
Trigger Instead of
Xy ra trc khi SQL Server kim tra rng buc
Thay i hnh ng cp nht vo bng o bng hnh ng thch
hp trn bng gc
58
V D
To bng 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
INSTEAD OF INSERT ON vw_CTDONDH
AS
-- Nu cha c n t hng, thm n t hng vo DONDH
Insert Into DONDH Select SoDH, NgayDH, MaNhaCC
From Inserted
Where SoDH Not In (Select SoDH
From DonDH)
-- Nu cha c vt t, thm vt t vo bng VATTU
Insert Into VATTU(MaVTu, TenVTu) Select MaVTu,
TenVTu From Inserted Where MaVTu Not In (Select
MaVTu From VATTU)
-- Thm cc chi tit t hng vo CTDONDH
Insert Into CTDONDH Select SoDH, MaVTu, SoLuong,
DonGia From Inserted
59