HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
170 likes | 307 Vues
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).
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
E N D
Presentation Transcript
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;