Upload
karan014
View
17
Download
0
Embed Size (px)
DESCRIPTION
...
Citation preview
Chng 3
Truy vn nng cao
www.themegallery.com
Ni dung
Cu trc lnh
Th tc thng tr
Kiu d liu cursor
Hm ngi dng 4
1
2
3
www.themegallery.com
Khai bo bin
Tn bin?
Tm vc bin?
Kiu d liu?
Gi tr khi to?
www.themegallery.com
Khai bo bin
C php
Declare Var_name Datatype
Lu : Tn bin phi bt u bng 1 k t @
V d
Declare @MaSinhVien nvarchar(10)
Declare @TienLuong float
Declare @Sum float, @Count int
Declare @temp TABLE (ma int,
ten nvarchar(10))
www.themegallery.com
Khai bo bin
Tm vc bin
Bin cc b c ngha trong mt query batch hay mt th tc thng tr hoc mt hm ngi dng
Bin h thng c ngha trn c h thng. Tn ca chng bt u bng @@. Cc bin ny l read-only.
V d bin h thng : @@fetch_status, @@rowcount, @@trancount
www.themegallery.com
Lnh gn
Set @TenBien = GiaTri
Set @TenBien = TenBien
Set @TenBien = BieuThuc
Select @TenBien = (KetQuaTruyVan)
V d :
Set @MaLop = TH2001
Set @SoSV = (select count(*) from SinhVien)
Set @MaLop = TH + CAST (Year(@NgayTuyenSinh) AS char(4))
www.themegallery.com
Lnh gn
Cng c th gn gi tr cho bin bng cu truy vn thay v ch th set
V d :
SV(MaSV, HoTen, Tuoi)
Select @Var2 = HoTen, @Var1 = Tuoi
from SV
where MaSV = 1
Kiu d liu phi tng ng. Nu cu truy vn tr v nhiu dng th cc bin ch nhn gi tr t dng u tin
www.themegallery.com
Cu trc iu khin
If
[Begin]
Code block
[End]
Else
[Begin]
Code block
[End]
C Php
C th cha cc cu truy vn phc tp ty
Khai bo bin Cc tnh ton trn bin Cc cu truy vn phc tp ty
Optional
www.themegallery.com
Cu trc iu khin If logial expression
[Begin]
Code block
[End]
[Else if logial expression
[Begin]
Code block
[End]
[,n]] Else
[Begin]
Code block
[End]
C th lp li nhiu ln ty . M phng cu trc case
www.themegallery.com
Cu trc iu khin V d
HocPhan(MaHP, TenHP, SiSo)
DangKy(MaSV, MaHP)
Vit lnh thm mt ng k mi cho sinh vin c m s 001 vo hc phn HP01 (gi s hc phn ny tn ti trong bng HocPhan). Qui nh s s lp cho mi hc phn khng qu 50 sv
www.themegallery.com
Cu trc iu khin
WHILE
[Begin]
{ sql_statement | statement_block }
[ BREAK ]
{ sql_statement | statement_block }
[ CONTINUE ]
[End]
Thot vng lp
B qua on lnh sau
www.themegallery.com
Cu trc iu khin V d
SinhVien(MaSV: int, HoTen: nvarchar(30))
Vit lnh xc nh mt m sinh vin mi theo qui nh: m sinh vin tng dn, nu c ch trng th m mi xc nh s chn vo ch trng
Vd: 1,2,3,7 m sinh vin mi: 4
www.themegallery.com
Cu trc iu khin
CASE [input_expression]
WHEN when_expression THEN result_expression
[ ...n ]
[ ELSE else_result_expression ]
END
C th l gi tr hoc biu thc iu kin
www.themegallery.com
Cu trc iu khin
V d:
NHAN_VIEN(MaNV, HoTen, NgaySinh, CapBac,
Phai)
Cho bit nhng nhn vin n tui v hu (tui v hu ca nam l 60, ca n l 55)
www.themegallery.com
Cu trc iu khin
Select * From NHAN_VIEN
Where datediff(yy, NgaySinh, getdate())
> = Case Phai
when Nam then 60
when Nu then 55
End
www.themegallery.com
Cu trc iu khin
Cho bit m NV, h tn v loi nhn vin (cp bc
www.themegallery.com
Bi tp 1
Cho 3 s a, b, c.
Tm phn s nh nht. In gi tr ca a, b, c.
Xut thng bo "S nh nht l :"
www.themegallery.com
Bi tp 1
1. Declare @a int, @b float, @c int
2. Set a = 2
3. Select b = 2.4
4. set c = 2.5
5. print 'a=' + @a + 'b=' + @b + ' c=' + @c
6. If @a>@b
7. select @tmp = @b
8. if @b>@c
9. set @tmp = @c
10. if @c>@a
11. set @tmp = @a
12. print 'S nh nht l: ' + @tmp
Tm li
www.themegallery.com
Bi tp 2
Cho CSDL:
SinhVien (MaSV, Hoten, DiemTB)
Tm sinh vin c im trung bnh ln nht v xut thng
bo theo yu cu sau:
Nu im TB >= 8.0 [MaSV] - im trung bnh [DiemTB] Xp loi : Gii
Nu im TB >= 6.5 [MaSV] - im trung bnh [DiemTB] Xp loi : Kh
Nu im TB >= 5.0 [MaSV] - im trung bnh [DiemTB] Xp loi : Trung bnh
Ngc li [MaSV] - im trung bnh [DiemTB] Xp loi : Yu
www.themegallery.com
Bi tp 3
Cho CSDL:
SinhVien(MaSV, HoTen, NgaySinh)
Tm sinh vin c MaSV = 0912033 vi nh
dng nh sau:
------------------------------------
M SV : 0912033
H tn : Nguyn Kim i
Ngy sinh : 20/9/1990
-------------------------------------
www.themegallery.com
Bi tp 4
Cho CSDL:
SinhVien(MaSV, HoTen, NgaySinh)
DiemThi(MaSV, MaMH, Diem)
Tnh im trung bnh ca tng sinh vin. Nu sinh
vin c im trung bnh > 5.0 th in l u ngc
li rt. In di dng bng.
V d:
MaSV HoTen im TB Kt qu
0912033 Nguyn Kim i 4.5 Rt
www.themegallery.com
Bi tp 5
Cho CSDL:
SinhVien(MaSV, HoTen, NgaySinh)
DiemThi(MaSV, MaMH, Diem)
Kim tra MaSV = 0912003 c tn ti cha
Nu cha tn ti xut thng bo [MaSV] cha tn ti.
Ngc li, xut thng bo [MaSV] sinh vin tn ti.
www.themegallery.com
Bi tp 6
Cho CSDL:
MonHoc(MaMH, TenMH,SoChi)
Kim tra MaMH tn ti cha?
Nu tn ti ri xut thng bo [MaMH] tn ti
Ngc li, pht sinh MaMH mi v in thng bo M MH mi l [MaMHmoi]
V d:
Tm c MaMH ln nht l : MH008
Pht sinh MaMH mi = MH009
www.themegallery.com
Ni dung
Cu trc lnh
Th tc thng tr
Kiu d liu cursor
Hm ngi dng 4
1
2
3
www.themegallery.com
Th tc thng tr
Th tc: Cha cc lnh T_SQL Tng t nh mt th tc trong cc ngn ng lp trnh: c th truyn tham s, c tnh ti s dng
Thng tr: c dch v lu tr thnh mt i tng trong CSDL
www.themegallery.com
Th tc thng tr
Tn th tc?
Gi tr tr v?
Tham s ra?
Yu cu x l?
Tham s vo?
www.themegallery.com
ngha
Tnh ti s dng
Ti u ha khi bin dch
Gim lng thng tin trao i
m bo an CSDL an ton hn
n gin ha vic lp bo co
www.themegallery.com
C php
Create {proc | procedure} proc_name
Parameter DataType [output] [,n]
As
Code block
[return [return_value] ]
Go
Tn ca stored .Nn bt u vi USP
Tn tham s (t nh tn bin)
Kiu DL ca tham s Gi tr tr ra nu c
th dng mt (hay mt s) tham s output
Thn sa SP, vit nh th no l ty vo tng bi ton c th
Ch tr v gi tr int
www.themegallery.com
V d
Vit th tc thm mt ng k ca sinh vin vo mt hc phn
--1. Khai bo i s
Create procedure usp_ThemDangKy
@MaSV char(5),
@MaHP char(5),
@SiSo int = null output
As
www.themegallery.com
V d --2. Khai bo ni dung
Declare @SiSo int
Select @SiSo = SiSo From HocPhan Where MaHP= @MaHP
if @SiSo < 50
Begin
insert into DANG_KY(MaSV, MaHP)
values(@MaSV, @MaHP)
set @SiSo = @SiSo+1
return 1
End
return 0
Go
Tn tham s (t nh tn bin)
www.themegallery.com
Stored-Procedure
Kim tra
tn ti?
Stored-
procedure
Phn tch
c php
Bo li!
Kim tra
tn ti?
Thnh
cng!
Thnh
cng!
Bin dch
khi thc thi
www.themegallery.com
Scalar input parameters
CREATE PROC USP_XemSV
@MaSV Char(10)
AS
BEGIN
IF @MaSV is NULL
SELECT * FROM SINHVIEN
ELSE
SELECT *
FROM SINHVIEN
WHERE MaSV = @MaSV
END
EXEC USP_XemSV 0912311
www.themegallery.com
Table-valued input parameters
--Khai bo kiu d liu mi
CREATE TYPE DSCTDonHang AS TABLE
(
MaSP char(10) UNIQUE,
DonGia float,
SoLuong int
)
--Thm d liu vo bng @temp
DECLARE @temp DSCTDonHang
INSERT @temp VALUES('1','1',3)
SELECT * FROM @temp
www.themegallery.com
Table-valued input parameters
CREATE PROC USP_THEMHOADON
@TEMP AS DSCTDONHANG READONLY,
@MADONHANG CHAR(10),
@MAKHACHHANG CHAR(10)
AS
BEGIN
--Thm phiu t hng
INSERT PHIEUDATHANG (MADATHANG,NGAYDAT,MAKHACHHANG)
VALUES(@MADONHANG, GETDATE(), @MAKHACHHANG)
--Thm chi tit phiu t hng
INSERT CHITIETPHIEUDAT (MACHITIETPD,MASANPHAM,SOLUONG,MADATHANG)
SELECT *, @MADONHANG FROM @TEMP
END
www.themegallery.com
Table-valued input parameters
--Khai bo danh sch chi tit n hng
DECLARE @TEMP DSCTDONHANG
--Thm chi tit vo danh sch
INSERT @TEMP
VALUES('CT00000009','SP00000005',2),
('CT00000010','SP00000003',2)
--Xem ni dung bng @temp
SELECT * FROM @TEMP
--Thc thi th tc
EXEC USP_THEMHOADON @TEMP,'DH001','KH00000001'
www.themegallery.com
Scalar output parameters
Thng k doanh thu ca mi sn phm
CREATE PROC USP_ThongKe
@MaSP Char(10),
@TongSLBan int output,
@TongDoanhThu float output
AS
www.themegallery.com
Scalar output parameters
BEGIN
--Tnh tng s lng
SET @TongSLBan = (SELECT SUM(SoLuong)
FROM CHITIETPHIEUDAT
WHERE MaSanPham = @MaSP)
--Tnh tng doanh thu
SET @TongDoanhThu =
(SELECT SUM(SoLuong * DonGia)
FROM CHITIETPHIEUDAT
WHERE MaSanPham = @MaSP)
END
www.themegallery.com
Scalar output parameters
--Gi thc thi
DECLARE @TongSL int, @TongDT float
EXEC USP_ThongKe 'SP00000001',
@TongSL output,
@TongDT output
PRINT CAST(@TongSL AS Char(3)) + Char(13)
PRINT @TongDT
www.themegallery.com
Gi thc thi
{EXEC| EXECUTE}
[ @return_status = ] procedure_name
{ [ @parameter _name = ] value [ OUTPUT ] } [ ,...n ]
@parameter_name dng khi tham s l output
Value c th l gi tr hoc bin, v phi truyn ng th t khai bo
www.themegallery.com
V d --1. Truyn tr
Exec usp_ThemDangKy 001, HP01
--2. Truyn tr c tn bin
Exec usp_ThemDangKy @MaHP = HP01, @MaSV = 001
--3. Truyn tr c tn bin
Exec usp_ThemDangKy @MaHP, @MaSV
--4. C output
Declare @SiSo int
Exec usp_ThemDangKy 001,HP01, @SiSo output
--5. Nhn li gi tr t hm
Declare @SiSo int, @KetQua int
Exec @KetQua = usp_ThemDangKy 001,HP01, @SiSo output
www.themegallery.com
Th tc thng tr
Sa th tc
Thay t kha Create trong lnh to th tc bng t kha Alter
Xa th tc
Drop {procedure|proc} procedure_name
V d:
Drop procedure usp_ThemDangKy
www.themegallery.com
Th tc thng tr
Th mc cha th tc
www.themegallery.com
Th tc lng nhau
Create proc A
AS
Begin
-- Cc lnh
End
Create proc B
AS
Begin
EXEC A
-- Cc lnh
End
www.themegallery.com
Bi tp
CSDL:
SinhVien (MaSV, HoTen, MaLop)
Lop(MaLop, Siso)
KetQua(MaSV, MaMH, Diem)
1. Vit th tc nhp vo MaSV kim tra sinh vin c
tn ti.
2. Vit th tc thm 1 SV vo CSDL. Cp nht s s
lp (Nu s sv > 50. Thng bo lp y.)
www.themegallery.com
Ni dung
Cu trc lnh
Th tc thng tr
Kiu d liu cursor
Hm ngi dng 4
1
2
3
www.themegallery.com
Cursor Khi nim
MaSV Hoten NgaySinh
SV001 Nguyn Minh Thu 20/1/1990
SV002 Nguyn Th Thch 2/3/1991
SV003 Trn Minh Trang 4/3/1990
tempCol MaSV Hoten NgaySinh
1 SV001 Nguyn Minh Thu 20/1/1990
2 SV002 Nguyn Th Thch 2/3/1991
3 SV003 Trn Minh Trang 4/3/1990
WHILE CURSOR
www.themegallery.com
Cursor Khi nim
L mt cu trc d liu nh x n mt tp cc dng d liu l kt qu ca mt cu truy vn (select)
Cho php duyt tun t qua tp cc dng d liu v c gi tr tng dng.
www.themegallery.com
Cursor khi nim
V tr hin hnh ca cursor c th c dng nh iu kin trong mnh where ca lnh update hoc delete
Cho php cp nht / xo d liu (d liu tht s trong CSDL) tng ng vi v tr hin hnh ca cursor
www.themegallery.com
Cursor khai bo
C th khai bo theo c php chun hoc c php m rng ca T-SQL
C php chun Declare cur_name [Insensitive] [Scroll] Cursor
For select_statement
[ For {Read only| Update [of column_name [,n] ] } ]
www.themegallery.com
Cursor Khai bo
C php m rng Declare cursor_name Cursor
[ Local | Global ]
[ Forward_only| Scroll]
[ Static| Dynamic]
[ Read_only]
For select_statement
[ For Update [ of column_name [,n] ] ]
www.themegallery.com
Cursor Khai bo
Cursor_name:
Chiu di 128 k t
C 2 cch khai bo Tn cursor Tn tnh m t cho mt i tng
cursor. Tn cursor s c gn bng i tng cursor thng qua cu lnh Declare.
VD:
DECLARE cur CURSOR
FOR SELECT MSSV, TenSV FROM SINHVIEN
www.themegallery.com
Cursor Khai bo
Bin cursor cursor c khai bo nh mt bin kiu CURSOR, khi gn gi tr cho bin cursor thng qua lnh SET th bin ny s tr ti i tng cursor.
VD:
DECLARE @cur CURSOR
SET @cur = CURSOR
FOR SELECT MSSV, TenSV FROM SINHVIEN
HOC
DECLARE @cur CURSOR
SET @cur = my_cur
www.themegallery.com
Cursor Khai bo
ngha cc tham s ty chn:
Insensitive / static: ni dung ca cursor khng thay i trong sut thi gian tn ti, trong trng hp ny cursor ch l read only.
Dynamic: trong thi gian tn ti, ni dung ca cursor c th thay i nu d liu trong cc bng lin quan c thay i.
www.themegallery.com
Cursor Khai bo
Local: cursor cc b, ch c th s dng trong phm vi mt khi (query batch) hoc mt th tc/ hm
Global: cursor ton cc (tn ti trong sut connection hoc n khi b hy tng minh)
www.themegallery.com
Cursor Khai bo
Forward_only: cursor ch c th duyt mt chiu t u n cui
Scroll: c th duyt ln xung cursor ty
Read only: ch c th c t cursor, khng th s dng cursor update d liu trong cc bng lin quan (ngc li vi for update )
www.themegallery.com
Cursor Khai bo
Mc nh:
Global
Forward_only
For update
Dynamic
www.themegallery.com
Cursor Khai bo
Bng tng thch
Insensitive Scroll Read Only Update
Insensitive
Scroll
Read Only
Update
www.themegallery.com
Cursor Khai bo
Local Global Static Dynamic Read_only Update Forward_only Scroll
Local
Global
Static
Dynamic
Read_only
Update
Forward_only
Scroll
www.themegallery.com
Cursor Duyt cursor
Dng lnh Fetch duyt tun t qua cursor
Fetch
[ [Next| Prior| First| Last| Absolute n| Relative n]
From ] Tn_cursor
[Into @Tn_bin [,n] ]
Bin cha gi tr ca cursor. S lng bin phi = s ct tr ra ca cu select khi gn cursor
www.themegallery.com
Cursor - Duyt cursor
Mc nh : fetch next
i vi cursor dng forward_only, ch c th fetch next
Bin h thng @@fetch_status cho bit lnh fetch va thc hin c thnh cng hay khng
www.themegallery.com
@@fetch_status
Trc lnh fetch u tin: @@fetch_status khng xc nh
Fetch next ln u tin: @@fetch_status =0 (thnh cng)
@@ fetch_status 0
Object
www.themegallery.com
Trnh t s dng Khai bo cursor
M cursor bng lnh Open
Open tn_cursor
Fetch (next,) cursor chuyn n v tr ph hp
Dng lnh INTO a gi tr ca cursor vo bin
Nu khng c lnh INTO, gi tr ca cursor s hin th ra mn hnh kt qu sau lnh fetch
C th s dng v tr hin ti nh l iu kin cho mnh where ca cu delete/ update (nu cursor khng l read_only)
www.themegallery.com
Trnh t s dng
Lp li vic duyt v s dng cursor, c th s dng bin @@fetch_status bit duyt qua ht cursor hay cha.
ng cursor bng lnh Close Close Tn_cursor
Hy cursor bng lnh deallocate Deallocate Tn_cursor
Sau khi ng, vn c th m li nu cursor cha b hy
www.themegallery.com
V d 1 --1. Khai bo
Declare cur_DSKhoa Cursor
For Select MaKhoa, TenKhoa From Khoa
--2. M cursor
Open cur_DSKhoa
Declare @MaKhoa int, @TenKhoa varchar(30)
--3. Np cursor ln 1
Fetch Next From cur_DSKhoa into @MaKhoa,
@TenKhoa
www.themegallery.com
--4. Fetch ln 2n
While @@fetch_status = 0
Begin
update SinhVien
set MaSV = MaKhoa +MaSV
Where MaKhoa = @MaKhoa
Fetch Next From cur_DSKhoa into @MaKhoa,
@TenKhoa
End
www.themegallery.com
--5. ng cursor
Close cur_DSKhoa
--6. Hy cursor
Deallocate cur_DSKhoa
www.themegallery.com
V d 2 Dng cursor cp nht dng xc nh
Declare cur_DSKhoa cursor scroll For
select MaKhoa, TenKhoa
From Khoa
Open cur_DSKhoa
Fetch Absolute 2 From cur_DSKhoa
If (@@fetch_status = 0)
Update Khoa
Set TenKhoa = aaa
Where current of cur_DSKhoa
Close cur_DSKhoa
Deallocate cur_DSKhoa
www.themegallery.com
Ni dung
Cu trc lnh
Kiu d liu cursor
Th tc thng tr
Hm ngi dng 4
1
2
3
www.themegallery.com
Hm ngi dng
Ging stored procedure:
L m lnh c th ti s dng
Chp nhn cc tham s input
Dch mt ln v t c th gi khi cn
Khc stored procedure
Chp nhn nhiu kiu gi tr tr v (ch mt gi tr tr v)
Khng chp nhn tham s output
Khc v cch gi thc hin
www.themegallery.com
Hm ngi dng
Phn loi : gm 3 loi
Gi tr tr v l kiu d liu c s (int, varchar, float, datetime) th mc Scalar value function
Gi tr tr v l Table c c t mt cu truy vn th mc Table value function
Gi tr tr v l table m d liu c c nh tch ly dn sau mt chui thao tc x l v insert. th mc Table value function
www.themegallery.com
Hm ngi dng
Loi 1: Gi tr tr v l kiu d liu c s
Create function func_name
( {parameter_name DataType [= default ] }
[,n])
Returns DataType
As
Begin
Return {value | variable | expression}
End
D khng c tham s cng phi ghi cp ngoc rng
D thn function ch c 1 lnh cng phi t gia Begin v End
www.themegallery.com
V d
Tm s ln nht trong 3 s a, b, c Create function UF_SoLonNhat (@a int,@b int,@c int)
Returns int
As
Begin
Declare @max int
Set @max = @a
If @b > max set @max = @b
If @c > max set @max = @c
Return @max
End
www.themegallery.com
Hm ngi dng
Loi 2: Gi tr tr v l Table c c t mt cu truy vn
Create function func_name
( {parameter_name DataType [= default ] }
[,n])
Returns Table
As
Return [ ( ]select_statement [ ) ]
Go
Thn function lun
ch c mt lnh,
khng t trong cp
Begin -End
www.themegallery.com
Hm ngi dng
Loi 3: Gi tr tr v l table m d liu c c nh tch ly dn sau mt chui thao tc x l v insert.
Create function func_name
( {parameter_name DataType [= default ] } [,n])
Returns TempTab_name Table(Table_definition)
As
Begin
Return
End
www.themegallery.com
V d Create function uf_DanhSachLop
Returns @DS
Table(MaLop varchar(10),SoSV int)
As
Declare cur_L cursor for Select Ma From Lop
Declare @Ma varchar(10)
Open cur_L
Fetch next from cur_L into @Ma
While @@fetch_status=0
Begin
. End
Close cur_L
Deallcocate cur_L
Return
Go
Insert into @DS
Values (@Ma, (select count(*) from
SinhVien where Lop=@Ma))
Fetch next from cur_L into @Ma
www.themegallery.com
S dng hm
Cc hm ngi dng c s dng trong cu truy vn, trong biu thc ph hp kiu d liu tr v ca n
V d:
Select dbo.SoLonNhat(3,5,7)
Select * from DanhSachLop()
www.themegallery.com
Hm ngi dng
Lu : khi gi hm loi 1 (tr v gi tr c bn), phi c tn owner ca hm i km
V d dbo.uf_SoLonNhat()
www.themegallery.com
Hm ngi dng
Thay i hm ngi dng
Thay t kha create trong cc lnh to hm bng t kha alter
Xa hm ngi dng
Drop Function Tn_Hm_Cn_Xa
V d :
Drop Function uf_DanhSachMatHang
www.themegallery.com
Hm ngi dng
Ngoi cc hm do ngi dng nh ngha, SQL Server cn cung cp cc hm xy dng sn ca h thng
Cc hm ny cung cp tin ch nh x l chui, x l thi gian, x l s hc
Sinh vin tm hiu thm v cc hm ny trong Books on-line v cc ti liu tham kho
www.themegallery.com
Hm ngi dng
Th mc cha hm ngi dng
Th mc cha hm h thng
Loi 1
Loi 2, 3
www.themegallery.com
Bi tp
SinhVien (MaSV, HoTen, MaLop)
Lop(MaLop, Siso)
KetQua(MaSV, MaMH, Diem)
1. Vit hm tnh im trung bnh ca sinh vin.
2. Vit hm tm m sinh vin c im trung bnh cao
nht.
3. Vit hm xut danh sch cc sinh vin c im < 5.
4. Vit th tc xp loi cho sinh vin (gi hm cu 1).
Q & A