Cấu trúc If…Else… xét điều kiện để quyết định những lệnh T-SQL nào sẽ được thực hiện
86 If Biểu_thức_điều_kiện
Khối_lệnh [ Else Khối_lệnh ]
Khối lệnh là một hoặc nhiều lệnh nằm trong cặp từ khóa Begin...End
Ví dụ:
Cho 2 mã SV bất kỳ, kiểm tra xem 2 SV đó có cùng ngày sinh hay không? Create Proc SP_SVCungNgaySinh
(@MaSV1 nvarchar(10), @MaSV2 nvarchar(10)) As
Begin
declare @NS1 smalldatetime Select @MaKhoa1 = MaKhoa
From SinhVien sv inner join Lop l on sv.MaLop = l.MaLop Where MaSV = @MaSV1
declare @NS2 smalldatetime Select @MaKhoa2 = MaKhoa
From SinhVien sv inner join Lop l on sv.MaLop = l.MaLop Where MaSV = @MaSV2
If @NS1 = @NS2
print N'2 SV có cùng ngày sinh' Else
print N'2 SV khác ngày sinh với nhau' End
Exec SP_SVCungNgaySinh 'SV0101','SV0102'
4.2. Sử dụng cấu trúc While
87
Cú pháp:
While Biểu_thức_điều_kiện [Begin] Khối_lệnh [Break] [Continue] [End] Trong đó:
Break: thoát khỏi vòng while hiện hành
Continue: trở lại đầu vòng while, bỏ qua các lệnh sau đó
Ví dụ:
Xét lược đồ quan hệ: SV(MaSV: int, HoTen: nvarchar(40))
Viết lệnh xác định 1 mã SV mới theo quy định: Mã SV tăng dần, nếu có chỗ trống thì mã mới sẽ chèn vào chỗ trống đó. Chẳng hạn nếu trong bảng SV đã có các mã SV 1,2,3,6 thì mã SV mới là 4
Declare @STT int Set @STT = 1
While exists(select * from SV where MaSV = @STT) set @STT = @STT+1
Insert into SV(MaSV, HoTen) values(@STT, N 'Nguyễn Văn Nam')
4.3. Sử dụng cấu trúc Case
Kiểm tra một dãy các điều kiện và trả về kết quả phù hợp với điều kiện đúng. Lệnh Case được sử dụng như một hàm trong câu lệnh Select
Cú pháp:
Dạng 1 (simple case):
Case Biểu_thức_đầu_vào When Giá_trị then Kết_quả
88 [...n] [ Else Kết_quả_khác] End Dạng 2 (searched case): Case
When Biểu_thức_đk then Kết_quả [...n] [ Else Kết_quả_khác] End Ví dụ: Xét lược đồ quan hệ: NhanVien(MaNV: int, HoTen: nvarchar(40), GioiTinh: nvarchar(3), NgaySinh: datetime, CapBac: smallint )
Cho biết những nhân viên đến tuổi nghỉ hưu biết rằng tuổi về hưu của nam là 60, của nữ là 55
select *
from NhanVien
where year(getdate()) – year(NgaySinh) > = Case GioiTinh when ‘Nam’ then 60 when ‘Nu’ then 55 End