170 likes | 299 Views
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU. SQL SERVER. NỘI DUNG. BÓ, TRANSACTION BIẾN CÁC CÂU LỆNH ĐIỀU KHIỂN CURSOR. BÓ (BATCH).
E N D
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU SQL SERVER
NỘI DUNG • BÓ, TRANSACTION • BIẾN • CÁC CÂU LỆNH ĐIỀU KHIỂN • CURSOR
BÓ (BATCH) • Bólàmộttậpcáccâulệnh T_SQL đượcbiêndịchđồngthờibởi SQL Server (chú ý đượcbiêndịchđồngthời, nếumộtlệnhcólỗicúphápthìcảbókhôngbiêndịchđược, khácvới transaction!) • Cáccâulệnhđượcgửiđồngthờiđến server. • Câulệnh GO đánhdấukếtthúcmộtbó (hoặcdùngchuộtlựa chon tậplệnhtrong Query Analyzer). • Vídụ.
BÓ (BATCH) • Mộtsốquytắcvoi GO: • Nếubócóbấtkỳmộtlỗinào toànbóbịkhôngđượcbiêndịch • Cácphátbiểu CREATE ( CREATE DATABASE, CREATE TABLE, CREATE INDEX, CREATE VIEW, …) thườngphảinằmriêngtrongmộtbó. • Khôngthểthayđổicấutrúcbảngvàsửdụngluôncộtmớibêntrongmộtbó
TRANSACTION • Transaction: nhómcáclệnh SQL thànhmộtđơnvịthựchiện. Nếumộttrongcáclệnhcủanhómkhôngthựchiệnthànhcôngthìkếtquảthựchiệncủatấtcảcáclệnhtrongnhómđềuhủy. • Transaction: BEGIN TRAN <Nhómcáclệnhcủa Transaction> COMMIT TRAN
TRANSACTION • Vídụ: BEGIN TRAN INSERT INTO nhanvien (Manv,Hoten,Gioitinh, Ngaysinh,Luong,Maphong,SDT) VALUES ('QT001', N'Nguyễn Văn A','Nam','1980-09-23',150000,‘QTA','0123456789'); INSERT INTO TDNN VALUES ('QT001', 1,'C'); INSERT INTO TDNN VALUES ('QT001', 4,'A'); COMMIT TRAN
BIẾN • Vídụ2: USE qlnv; GO • DECLARE @sonvINT; • SELECT @sonv=COUNT(*) • FROM nhanvien; • PRINT N'Sốnhânviên:' + • CAST(@sonv AS CHAR(10)); • Vídụ1: USE qlnv; GO DECLARE @ma CHAR(5); SET @ma='KD004'; SELECT * FROM nhanvien WHERE manv=@ma;
BIẾN • Khaibáobiến: DECLARE @<TenBien> <Kiểu> [(<kíchthước>)] • Biếnlàcụcbộtrongmộtbóhoặcmộthàm/thủtục • Gángiátrịchobiếnbằng 2 lệnh: SET @<TenBien> =<giá_trị>; SELECT @<TenBien> =<giá_trị>; SELECT @<TenBien> = <hàm> FROM <TenBang> … • Biếnhệthống (do SQL server quảnlý) cótênbắtđầu @@, làbiếntoàncục. Vídụ: PRINT @@SERVERNAME; SELECT @@MAX_CONNECTIONS AS 'Max Connections‘;
CÁCCÂUĐIỀUKHIỂN • Khối BEGIN…END: nhómmộtsốcâulệnhđượcthựcthivớinhautrongcáccấutrucđiềukhiển. • IF <biểuthứcđiềukiện> {<câulệnh SQL>|<khốicâulệnh>} [ELSE [<biểuthứcđiềukiện>] {<câulệnh SQL>|<khốicâulệnh>}] • Nếucâulệnh SELECT sau IF trảranhiềuhơnmộtgiátrịthìcóthểdùngthêmlượngtừ EXISTS sau IF.
CÁCCÂUĐIỀUKHIỂN • Vídụ (câulệnh IF ELSE): DECLARE @macb CHAR(5); SET @macb='QT001'; DECLARE @luongcbINT; SELECT @luongcb=luong FROM nhanvien WHERE manv=@macb; IF @luongcb <2500000 PRINT N'Thunhậpthấp'; ELSE PRINT N'Thunhậpcao';
CÁCCÂUĐIỀUKHIỂN • CASE (Kođứngđộclập) • Dạng 1: CASE <Biểuthứckiểmtra> WHEN <biểuthức1> THEN <giátrị1> … WHEN <biểuthứcn> THEN <giátrị n> ELSE <giátrịn+1> END • Dạng 2: CASE WHEN <Điềukiện1> THEN <giátrị1> … • WHEN <Điềukiện1n> THEN <giátrị n> ELSE <giátrịn+1> END
CÁCCÂUĐIỀUKHIỂN • CASE (Vídụ) • Dạng 1: SELECT Hoten, Tennn, TrinhDo= CASE TDo WHEN 'A' THEN N'Yếu' WHEN 'B' THEN N'Tạmđược' WHEN 'C' THEN N'Thànhthạo' WHEN 'D' THEN N'Rấttốt' END FROM Nhanvien, DMNN, TDNN WHERE Nhanvien.manv=TDNN.manv and TDNN.mann=DMNN.mann • Dạng 2: • SELECT Hoten, Phanloai= • CASE • WHEN Year(getdate()) – Year(Ngaysinh) <30 THEN N'Trẻ' • WHEN Year(getdate()) - Year(Ngaysinh)> 30 and Year(getdate()) – Year(Ngaysinh)<40 THEN N'Trungniên' • ELSE N'Già' • END • FROM Nhanvien
CÁCCÂUĐIỀUKHIỂN • WHILE: WHILE <biểuthứclôgic> [BEGIN <(các) câulệnh> [BREAK] <(các) câulệnh> [CONTINUE] END]
CÁCCÂUĐIỀUKHIỂN • WHILE: (Vídụ) USE qlnv GO WHILE (SELECT AVG(luong) FROM nhanvien) < 4000000 BEGIN UPDATE nhanvien SET luong = luong * 2; SELECT MAX(luong) FROM nhanvien; IF (SELECT MAX(luong) FROM nhanvien) > 7000000 BREAK ELSE CONTINUE END
BIẾN CURSOR DECLARE nhanvien_cursor CURSOR FOR SELECT Manv, Hoten, Ngaysinh FROM Nhanvien; DECLARE @macb CHAR(5); DECLARE @tencbNCHAR(40); DECLARE @ngaysinhcbdatetime; OPEN nhanvien_cursor; FETCH NEXT FROM nhanvien_cursor INTO @macb, @tencb, @ngaysinhcb; WHILE @@FETCH_STATUS = 0 BEGIN PRINT @macb + @tencb + CAST (@ngaysinhcb as CHAR(10)); FETCH NEXT FROM nhanvien_cursor INTO @macb, @tencb, @ngaysinhcb; END CLOSE nhanvien_cursor; DEALLOCATEnhanvien_cursor
BIẾN CURSOR • Dùngxửlýđếntừngbảnghicủatậpdữliệu • Khaibáo: DECLARE cursor_name CURSOR FOR <Câulệnh Select> • Mở / đặt con trỏlênbảnghiđầu: OPEN cursor_name • Lấybảnghi: FETCH [ [ NEXT | PRIOR | FIRST | LAST | ABSOLUTE {n | @nvar} | RELATIVE {n | @nvar} ] FROM ] { { [GLOBAL] cursor_name } | @cursor_variable_name} [INTO @variable_name[,...n] ] • CLOSE cursor_name; • DEALLOCATE cursor_name;