Mình không dám chắc code dưới đây là đúng là tối ưu, vậy nên bạn nào có cách làm hay hơn xin đóng góp thêm nhé! Nội dung 1: Câu 1: Nhập vào 2 số @s1, @s2. In ra câu “Số lớn nhất của @s1 và @s2 là max” với @s1, @s2, max là các giá trị tương ứng. Mã: CREATE PROC CAU1 (@S1 INT,@S2 INT) AS DECLARE @M INT SET @M=@S2 IF @S1>@S2 SET @M=@S1 PRINT N'SỐ LỚN NHẤT CỦA'+STR(@S1) +N','+STR(@S2)+N' '+ N'LÀ' + STR(@M) EXECUTE CAU1 2,4 Câu 2: Nhập vào 2 số @s1, @s2. Xuất max của chúng ta tham số @max. Cho thực thi và in các giá trị của các tham số này để kiểm tra. Mã: CREATE PROC CAU2 (@S1 INT,@S2 INT,@MAX INT OUTPUT) AS SET @MAX=@S1 IF @S2>@MAX SET @MAX=@S2 DECLARE @T INT EXEC CAU2 100,18,@T OUTPUT SELECT @T Câu 3: Viết thủ tục nhập dữ liệu cho bảng KHOA Mã: CREATE PROC CAU3(@MAKHOA NVARCHAR(10),@TENKHOA NVARCHAR(50),@DIENTHOAI NVARCHAR(20)) AS INSERT INTO KHOA VALUES(@MAKHOA,@TENKHOA,@DIENTHOAI) EXEC CAU3 'dhmt',N'Đồ họa','99999999999' Câu 4: Viết thủ tục đưa vào mã sinh viên và in ra câu thông báo: “Họ và tên sinh viên này lớn tuổi hơn (cùng hoặc nhỏ tuổi hơn) sinh viên kia” dựa vào năm sinh của 2 sinh viên. Mã: CREATE proc CAU4(@masv1 nvarchar(10), @masv2 nvarchar(10)) as begin declare @n1 nvarchar(4) declare @n2 nvarchar(4) declare @hoten1 nvarchar(30) declare @hoten2 nvarchar(30) select @hoten1=hodem+' '+ten, @n1=year(ngaysinh) from sinhvien where @masv1=masv select @hoten2=hodem+' '+ten, @n2=year(ngaysinh) from sinhvien where masv=@masv2 if(@n1>@n2) print @hoten1 + N' lớn tuổi hơn ' +@hoten2 if(@n1<@n2) print @hoten1 + N' nhỏ tuổi hơn ' +@hoten2 else print @hoten1 + N' bàng tuổi ' +@hoten2 end exec CAU4 'dh01-005', 'dl01-001' Câu 5: Viết thủ tục với tham số đưa vào là mã lớp, tham số xuất ra là số sinh viên của lớp đó. Mã: CREATE proc CAU5 (@malop nvarchar(10)) as begin declare @sv nvarchar(10) select @sv=count(masv) from sinhvien where malop=@malop print N'Lớp có mã lớp: '+@malop + N' có ' + @sv + N' sinh viên' end exec CAU5 'dl01' Câu 6: Viết thủ tục cập nhật cho bảng DIEMTHI với tham số đưa vào là mã sinh viên, mã học phần, lần thi, điểm thi củ, điểm thi mới. Mã: CREATE proc CAU6 (@mahocphan nvarchar(10), @masv nvarchar(10), @lanthi tinyint, @diemthimoi numeric(5, 2)) as begin update diemthi set mahocphan=@mahocphan, masv=@masv, lanthi=@lanthi, diem=@diemthimoi where masv=@masv and mahocphan=@mahocphan end EXECUTE CAU6 'sql','dl01-001',1,9 Câu 7: Viết thục tục hiển thị các thông tin về sinh nhật ngày hôm nay gồm các thông tin: họ và tên, năm sinh, giới tính (Nam hoặc nữ), tên lớp. Mã: CREATE PROC CAU7 AS SELECT MASV, HODEM, TEN, NGAYSINH,CASE GIOITINH WHEN 0 THEN N'NỮ' ELSE N'Nam' END 'GIOI TINH', NOISINH FROM SINHVIEN WHERE DAY(NGAYSINH)=DAY(GETDATE()) AND MONTH(NGAYSINH)=MONTH(GETDATE()) EXEC CAU7 Câu 8: Viết thủ tục xóa toàn bộ thông tin của sinh viên trong CSDL có mã sinh viên là tham số đưa vào. Mã: CREATE PROC CAU8(@MASV NVARCHAR(10)) AS DELETE FROM SINHVIEN WHERE @MASV=MASV EXEC CAU8 'dh01-005' Câu 9: Viết thủ tục với tham số đưa vào là mã sinh viên, tham số xuất ra là điểm trung bình lần 1 và số lần thi của sinh viên đó. Mã: CREATE PROC CAU9(@MASV NVARCHAR(10)) AS BEGIN DECLARE @TB FLOAT DECLARE @SOLT INT SELECT @TB=(SELECT AVG(DIEM) FROM DIEMTHI WHERE @MASV=MASV AND LANTHI=1) SELECT @SOLT=(SELECT COUNT(LANTHI) FROM DIEMTHI WHERE @MASV=MASV) PRINT N'Sinh viên có mã sinh viên:'+N' '+@MASV+N' '+N'có điểm thi trung bình lần 1 là:'+STR(@TB)+N' '+N'số lần thi là: '+STR(@SOLT) END EXEC CAU9 'dl01-003' Câu 10: Xây dựng thủ tục giải phương trình bậc nhất (ax+b=0) gồm 2 tham số đưa vào là a và b. Mã: CREATE PROC CAU10(@A INT,@B INT) AS DECLARE @X INT SET @X=-(@B)/@A IF @A=0 IF @B=0 PRINT N'Phương trình có vô số nghiệm!' ELSE PRINT N'Phương trình vô nghiệm!' ELSE PRINT N'Phương trình có một nghiệm là:'+N' '+STR(@X) EXEC CAU10 3,4 Câu 11: Viết thủ tục đưa vào mã khoa, thủ tục trả về số sinh viên của khoa đó. Mã: CREATE PROC CAU11(@MAKHOA NVARCHAR(5)) AS BEGIN DECLARE @DEM INT SELECT @DEM=(SELECT COUNT(S.MASV) FROM SINHVIEN S JOIN LOP L ON S.MALOP=L.MALOP JOIN KHOA K ON L.MAKHOA=K.MAKHOA WHERE @MAKHOA=L.MAKHOA) PRINT N'Số sinh viên của khoa có mã khoa: '+@MAKHOA+N' la '+ STR(@DEM)+N' sinh viên' END EXEC CAU11 'khmt' Câu 12: Viết thủ tục với tham số đưa vào là mã sinh viên, mã học phần, lần thi và hiển thị ra câu thông báo “Họ tên sinh viên học lớp thi học phần đạt loại’ (A,B,C,D,F) Mã: create proc cau12 (@masv nvarchar(10), @mahocphan nvarchar(10), @lanthi int) as begin declare @diemthi float declare @hodem nvarchar(25) declare @ten nvarchar(10) declare @tenlop nvarchar(60) declare @tenhocphan nvarchar(50) select @hodem=hodem, @ten=ten, @tenlop=tenlop, @diemthi=diem, @mahocphan=hocphan.mahocphan, @tenhocphan=tenhocphan from sinhvien inner join lop on sinhvien.malop=lop.malop inner join diemthi on sinhvien.masv=diemthi.masv inner join hocphan on diemthi.mahocphan=hocphan.mahocphan where sinhvien.masv=@masv and hocphan.mahocphan=@mahocphan and lanthi=@lanthi print 'Sinh viên '+@hodem+' '+@ten+' học lớp '+@tenlop+' thi học phần '+'"'+@tenhocphan+'"'+' được '+str(@diemthi)+' điểm, đạt loại: '+ case when @diemthi>=8.5 then 'A' when @diemthi>=7.5 then 'B' when @diemthi>=5.5 then 'C' when @diemthi>=4.5 then 'D' else 'F' end end exec cau12 'dl01-002', 'tindc', '1' Câu 13: Xây dựng thủ tục hiển thị tất cả thông tin của sinh viên từ bảng SINHVIEN có ngày sinh Từ ngày và Đến ngày (2 tham số vào) a. Nếu không truyền tham số Đến ngày thì hiển thị thông tin có Ngaysinh>=Từ ngày. b. Nếu không truyền vào tham số Từ ngày thì hiển thị thông tin có Ngaysinh<=Đến ngày. c. Nếu cả 2 tham số không truyền vào thì hiển thị tất cả. Mã: CREATE PROC CAU13(@TUNGAY DATETIME=NULL,@DENNGAY DATETIME=NULL) AS begin IF @TUNGAY IS NULL AND @DENNGAY IS NULL SELECT * FROM SINHVIEN ELSE IF @TUNGAY IS NULL SELECT * FROM SINHVIEN WHERE NGAYSINH<=@DENNGAY ELSE IF @DENNGAY IS NULL SELECT * FROM SINHVIEN WHERE NGAYSINH>=@TUNGAY ELSE SELECT * FROM SINHVIEN WHERE NGAYSINH BETWEEN @TUNGAY AND @DENNGAY End exec CAU13 '1986-03-15','1986-08-09'
Thông tin bổ ích thật nhưng mà mình không hiểu lắm điệu này phải nghiên cứu thêm thôi. À mình chắc là thành viên cuối cùng đọc bài viết này quá. Thông tin bổ ích thật nhưng mà mình không hiểu lắm điệu này phải nghiên cứu thêm thôi. À mình chắc là thành viên cuối cùng đọc bài viết này quá.