Cùng nắm kiến thức trong chương này thông qua việc tìm hiểu các nội dung sau: Khai báo và sử dụng biến, cấu trúc lệnh, con trỏ, Stored procedure, một số hàm cơ bản,....Mời các bạn cùng tham khảo!
KHOA CÔNG NGHỆ THÔNG TIN Chương T-SQL PROGRAMING LOGO I KHAI BÁO VÀ SỬ DỤNG BIẾN Có loại biến: Cục toàn cục Biến cục bộ: Định nghĩa: biến sử dụng đoạn chương trình khai báo Query Batch, stored procedure/ function , chứa giá trị thuộc kiểu định Biến cục bắt đầu ký hiệu @ Khai báo: Declare , … Ví dụ: Declare @MaSinhVien char(10) Declare @Gioitinh bit, @Ngaysinh SmallDateTime Gán giá trị cho biến Cú pháp Set @tên_biến = {giá_trị | biến | biểu_thức | Cấu trúc Select } Ví dụ Set @MaLop = ‘TH2001’ Set @SoSV = (select count (*) from SinhVien) Set @MaLop = ‘TH’+Year(@NgayTuyenSinh) Chú ý: Kết lệnh Select cho giá trị (không thể nhiều giá trị) Gán giá trị cột dòng dòng định Table cho biến Cú pháp: Select =, =, … [Where ] Nếu kết Select cho nhiều dịng gán giá trị dịng có STT vật lý cho biến Hiển thị kết biến: Print Ví dụ: Hiển thị dịng ‘Xin chào’ họ tên sinh viên bảng SINHVIEN Declare @ht nVarchar(30) Select @ht=HotenFrom SINHVIEN Print 'Xin chào'+ @ht Biến toàn cục: Định nghĩa: biến sử dụng đâu hệ thống Trong SQL biến toàn cục Là biến hệ thống SQL Server cung cấp SQL tự cập nhật giá trị cho biến này, Người sử dụng gán giá trị trực tiếp cho biến Bản chất hàm (function) bắt đầu ký tự @@ Một số biến toàn cục SQL Tên biến Ý nghĩa @@ERROR Mã số lỗi câu lệnh T-SQL cuối bị lỗi @@FETCH_STATUS Trạng thái truy nhập trỏ: trạng thái truy nhật cuối thành công -1 có lỗi @@IDENTITY Giá trị xác định (identity) cuối thêm vào @@ROWCOUNT Số lượng dòng kết câu lệnh SQL gần @@SERVERNAME Tên Server địa phương @@TRANSCOUNT Số lượng giao dịch mở @@VERSION Thông tin phiên SQL Server dùng @@CURSOR_ROWS Số lượng dòng liệu trỏ mở gần II CẤU TRÚC LỆNH Cấu trúc IF… Cú pháp: If Lệnh| Khối_lệnh [Else Lệnh| Khối_lệnh] Khối lệnh nhiều lệnh nằm cặp từ khóa begin…end Giải thích cấu trúc Ví dụ: Viết lệnh để thêm liệu (001,Hồ Thị ,Lan, CT11) vào bảng SINHVIEN Qui định lớp tối đa 50 sinh viên Declare @SiSo int Select @SiSo = Count(MaSV) From SINHVIEN Where MaLop= ‘CT11’ If @SiSo < 50 Begin Insert into SINHVIEN(MaSV, Ho, Ten, Malop) Values(‘001’,N’Hồ Thị’ ,N’Lan’, ‘CT11’) Print N’Thêm thành công’ End Else Print N’Lớp đủ số sinh viên’ Cấu trúc Case Cú pháp: Có hai dạng –Dạng (simple case): Dạng 2: (searched case): Case Biểu_thức When Giá_trị Then kết_quả [When Giá_trị Then Kết_quả [ n] [ Else kết_quả_khác] End Case When then kết_quả When then kết_quả [ n] [ Else kết_quả_khác] End Cấu trúc WHILE Cú pháp While Lệnh| Khối lệnh [Break] [Continue] Có thể thêm Break Continue khối lệnh while Break: khỏi vịng While hành Continue : trở lại đầu vòng While, bỏ qua lệnh sau Giải thích: Bài tập: Viết thủ tục thêm liệu cho bảng CSDL QL_DIEMMHSV usp_Insert_DMKHOA usp_Insert_DMMON usp_Insert_DMLOP usp_Insert_SINHVIEN usp_Insert_DIEMTHI Viết thủ tục usp_GET_ALL_SinhvienLop: hiển thi danh sách sinh viên gồm Masv, Malop, Ho, Ten, Gioitinh(Nam,Nữ), Ngay sinh (dd/mm/yyyy) lớp định Viết thủ tục usp_Phanlop để phân lớp định Viết thủ tục usp_TinhdiemTBC; xuất liệu bảng định Viết thủ tục usp_DSNgungtiendo: đưa danh sách sinh viên ngừng tiến độ học tập (có tổng số đơn vị học trình mơn học thiếu điểm >25) Alter PROC usp_Inserrt_SinhVien @masv varchar(10), @HoTen nvarchar(30), @Dienthoai varchar(7),@maLop varchar(10) ,Ngaysinh Date @tbloi varchar(30)=null output AS BEGIN IF(EXISTS(SELECT * FROM SINHVIEN sv WHERE sv.Masv = @Masv)) BEGIN set @tbloi= N'Mã số sinh viên ' + @Masv + N' tồn tại' RETURN -1 END IF(NOT EXISTS(SELECT * FROM DMLOP l WHERE l.MaLop = @MaLop)) BEGIN set @tbloi= N'Mã số lớp ' + @MaLop + N' chưa tồn tại' RETURN -1 END INSERT INTO SINHVIEN(Masv, HoTen, Dienthoai, MaLop) VALUES(@Masv, @HoTen, @Dienthoai, @MaLop) RETURN /* procedure tự trả không RETURN */ END GO DECLARE @kq varchar(30) EXEC usp_Inserrt_SinhVien '002', N'Nguyễn Văn A', '7654343', 'CT11',’09/09/1987’@kq output PRINT @kq CREATE PROC usp_GETALL_SinhVien @maLop varchar(10) AS BEGIN IF(NOT EXISTS(SELECT * FROM SINHVIEN WHERE Malop = @maLop)) BEGIN PRINT N'Mã số lớp ' + @maLop + N' chưa tồn tại' RETURN -1 END SELECT Masv,Ho,Ten,Gioitinh,Ngaysinh,Dienthoai,Malop FROM SINHVIEN Where Malop = @maLop /*procedure trả không RETURN*/ END GO 5.Chỉnh sửa thủ tục Thay từ khóa Create lệnh tạo thủ tục từ khóa Alter Xóa thủ tục Drop procedure Mã hóa thủ tục Thủ tục mã hoá tuỳ chọn WITH ENCRYPTION định Nếu thủ tục mã hố, ta khơng thể xem nội dung thủ tục Thêm từ khóa WITH ENCRYPTION Trong lệnh Alter thủ tục Biên dịch lại thủ tục Khi người sử dụng làm thay đổi tới index bảng Stored procedures phải biên dịch lại (recompiled) để chấp nhận thay đổi Thêm từ khóa WITH RECOMPILE lệnh Alter thủ tục V Hàm (Function) Hàm đối tượng sở liệu tương tự thủ tục Điểm khác biệt hàm thủ tục hàm trả giá trị Giá trị trả bảng có từ câu truy vấn Cú pháp CREATE FUNCTION tên_hàm ([danh_sách_tham_số vào]) RETURNS (kiểu_trả_về_của_hàm) |[Table] AS BEGIN các_câu_lệnh_của_hàm Return {Giá trị | Biến | Biểu thức | Câu lệnh truy vấn} END Bài tập Viết Viết Viết Viết Viết Viết hàm hàm hàm hàm hàm hàm Xeploai theo quy định hiển thị giới tính Nam, Nữ đọc điểm đọc số có ba chữ số đọc số có nhiều chữ số tách tên Bài tập 1: Biến vào: DIEM; Biến ra: XL Create Function Xeploai (@Diem numeric(4,1))Returns nvarchar(10) as Begin declare @xl nvarchar(10) set @xl=case when @Diem>=8 then N'Giỏi' when @Diem>=7 then N'Khá' When @Diem>=5 then N'Trung binh' Else N'Yếu' End Return @xl End Ví dụ ứng dụng: Hiển thị danh sách sinh viên gồm: Masv, Họ, Tên, Malop, DTBC, Xếp loại Select SINHVIEN.MaSV, HoTen, DTBC, dbo.Xeploai(DTBC) as 'Xếp loại' From SINHVIEN, DIEMTBC Where SINHVIEN.Masv=DIEMTBC.Masv Function Tachten(@ht nvarchar(30)) returns nvarchar(10) As Begin Declare @ten varchar(10), @L int, @i int,@j int,@kt varchar(10) Set @L=LEN(@ht) Set @i=1 While @i