create database ThuTuc
--Phần 1
--Câu 1:
--Tạo bảng học sinh
use ThuTuc;
create table Hocsinh
(MaHS varchar(10), HoDem nvarchar(20), Ten nvarchar(10),
NgaySinh date, NoiSinh nvarchar(50), DiemDauVao float)
--Câu 2:
--Tạo thủ tục để nhập dữ liệu cho bảng
use ThuTuc;
create procedure NhapDLHS
(@MaHS varchar(10), @HoDem nvarchar(20), @Ten nvarchar(10),
@NgaySinh date, @NoiSinh nvarchar(50), @DiemDauVao float)
as
insert into Hocsinh
values(@MaHS,@HoDem,@Ten,@NgaySinh,@NoiSinh,@DiemDauVao)
exec NhapDLHS '101',N'Tạ Văn','Anh','2-1-1992',N'Hà Nội',12
select * from Hocsinh
--Câu 3:
--Viết thủ tục đưa ra thông tin về học sinh
--có điểm đầu vào bằng hoặc lớn hơn số điểm của người dùng đưa ra
create procedure ThongTinHS
(@diem float)
as
select MaHS as N'Mã học sinh',HoDem+' '+Ten as N'Họ và tên',
Ngaysinh as N'Ngày sinh', noisinh as N'Nơi sinh'
from Hocsinh
where DiemDauVao <= @diem
exec ThongTinHS 11
--Câu 4:
--Viết thỉ tục xoá những học sinh có điểm đầu vào nằm giữa hai mức do người dùng đặ ra
create procedure XoaHS
(@tu float, @den float)
as
delete from Hocsinh
where DiemDauVao between @tu and @den
exec XoaHS 12,16
--Câu 5:
--Viết thủ tuch sửa lại nơi sinh theo yêu cầu của người dùng cho
--học sinh có mã theo yêu cầu của người dùng
create procedure SuaNoiSinh
(@ma varchar(15),@noisinh nvarchar(50))
as
update Hocsinh
set NoiSinh=@noisinh
where MaHS=@ma
exec SuaNoiSinh '101',N'Thái Nguyên'
select * from Hocsinh
--Câu 6:
--Nhập vào số ngày công đã làm và tiền công.
--Tính lương, nếu số ngày công >20 thì từ ngày 21 trở đi tiền công tính hệ số 1.25
create procedure TinhTienCong
(@ngay int, @luong money)
as
declare @tien money
if @ngay < 21
set @tien = @ngay*@luong
else set @tien = (@ngay*@luong+(@ngay-20)*@luong*1.25)
print N'Tiền lương là: '+cast(@tien as varchar(50))
alter procedure TinhTienCong
(@ngay int, @luong money)
as
declare @tien money
if @ngay < 21
set @tien = @ngay*@luong
else set @tien = (20*@luong+(@ngay-20)*@luong*1.25)
print N'Tiền lương là: '+cast(@tien as varchar(50))
exec TinhTienCong 22,1
--Câu 7:
--Viết chương trình tìm các số có hai chữ số dạng ab mà a+b=a*b
alter procedure AB
as
declare @a int, @b int, @c varchar(30)
set @a=1
set @b=0
set @c=''
while @a between 1 and 9
begin
while @b between 0 and 9
begin
if @a+@b=@a*@b
set @c=cast(@a*10+@b as varchar(2))
set @b=@b+1
end
set @a=@a+1
end
print N'Kết quả cần tìm là: '+@c+' '
exec AB
drop procedure AB
--Câu 8:
--Lập trình đọc từ bàn phím 4 số nguyên
--Đếm các số chẵn và tính tổng các số chẵn
alter proc Cau8
(@a int, @b int, @c int, @d int)
as
declare @tong int , @i int
set @tong=0
set @i=0
if @a%2 =0
begin
set @i=@i+1
set @tong=@tong+@a
end
if @b%2 =0
begin
set @i=@i+1
set @tong=@tong+@b
end
if @c%2 =0
begin
set @i=@i+1
set @tong=@tong+@c
if @d%2 =0
begin
set @i=@i+1
set @tong=@tong+@d
end
end
print N'Số lượng số chẵn là: '+cast(@i as varchar(2))
+ N' Tổng các số chẵn là: '+cast (@tong as varchar(10))
exec Cau8 121,21,4,5
--Câu 9:
--Tìm ước chung của 2 số nhập vào
create proc UCLN
(@a int, @b int)
as
while (@a!=@b)
if (@a>@b)set @a=@a-@b
else set @b=@b-@a
print N'UCLN là '+cast(@a as varchar(10))
exec UCLN 8,12
--Câu 10:
--Viết 1 thủ tục nhập vào 2 số ở dạng tử số và mẫu số sau đó đưa ra phân số tối giản
alter proc RutGon
(@a int, @b int)
as
declare @m int, @n int
set @m=@a
set @n=@b
while (@a!=@b)
if (@a>@b)set @a=@a-@b
else set @b=@b-@a
print cast(@m as varchar(10))+'/'+cast(@n as varchar(10))+' = '
+cast(@m/@a as varchar(10))+'/'+cast(@n/@a as varchar(10))
exec rutgon 6,8
--Câu 11:
--Nhập vào 2 số nguyên, tìm BCNN
create proc BCNN
(@a int,@b int)
as
declare @m int, @n int
set @m=@a
set @n=@b
while (@a!=@b)
if (@a>@b)set @a=@a-@b
else set @b=@b-@a
print N'BCNN của '+cast(@m as varchar(10))+N' và '+cast(@n as varchar(10))
+N' là: '+cast(@m*@n/@a as varchar(10))
exec BCNN 6,8
--Câu 12:
--Viết thủ tục tính N giai thừa
create procedure GiaiThua
(@n int)
as
declare @i int, @s int
set @i=1;
set @s=1
while @i<=@n
begin
set @s=@s*@i
set @i=@i+1
end
print cast(@n as varchar(10))+'! = '+cast(@s as varchar(30))
exec GiaiThua 10
--Câu 13:
--Viết thủ tục đưa ra các ước của N
create proc TimUoc
(@N int)
as
declare @uoc varchar(100), @i int
set @i=1
set @uoc=''
while (@i<@N)
begin
if @N%@i=0 set @uoc=@uoc+CAST(@i as varchar(10))+' '
set @i=@i+1
end
print N'Các ước của '+cast(@n as varchar(10))+N' là: '+@uoc
exec TimUoc 64
--Câu 14:
--Viết thủ tục đưa ra số ngày tháng
create proc SoNgay
(@Thang int, @nam int)
as
declare @ngay int
if (@Thang between 1 and 12)
begin
set @ngay=
case
when @thang in (1,3,5,7,8,10,12) then 31
when @thang in (4,6,9,11) then 30
when @thang = 2 and @nam%4 =0 then 29
else 28
end
print N'Tháng '+cast(@thang as varchar(2))+N' năm '+cast(@nam as varchar(10))
+N' có '+cast(@ngay as varchar(2))+N' ngày'
end
else print N'Bạn nhập sai tháng'
exec SoNgay 13,12
--Câu 15:
--Viết thủ tục tính tổng
--S=2+4+6+...+n nếu n chẵn
--S=2+4+6+...+(n-1) nếu n lẻ
use ThuTuc
create procedure TinhTong
(@n int)
as
declare @i int, @tong int
set @i =2
set @tong=0
if @n%2!=0 set @n=@n-1
while @i<=@n
Begin
set @tong=@tong+@i
set @i=@i+2
end
return @tong
declare @a int
exec @a= TinhTong 4
print @a
--Câu 16
--Viết thủ tục kiểm tra một số có phải số nguyên tố hay không
create procedure NguyenTo
(@n int)
as
declare @i int=2,@kt bit
while @i<=@n/2
begin
if @n%@i=0 set @kt=1 else set @kt=0
if @kt=1 break
set @i=@i+1
end
if @kt=1 print cast(@n as varchar(20))+N' không phải là số nguyên tố'
else print cast(@n as varchar(20))+N' là số nguyên tố'
exec NguyenTo 5
--Phần 2
--Phần 2
--Phần 2
--Phần 2
--Phần 2
--Phần 2
--Câu 1:
--Viết thủ tục nhập vào hai số a,b và phép tính đưa ra kết quả
--Dùng lệnh xuất dữ liệu bên trong thủ tục
create procedure Pheptinh
(@a float, @b float, @dau varchar(1))
as
declare @kq varchar(20)
set @kq=
case
when @dau='+' then @kq=cast(@a+@b as varchar(20))
when @dau='-' then @kq=cast(@a-@b as varchar(20))
when @dau='*' then @kq=cast(@a*@b as varchar(20))
when @dau='/' then if (@b!=0)set @kq=cast(@a/@b as varchar(20)) else set @kq='Không chia được cho 0'
when @dau='%' then if (@b!=0) set @kq=cast(@a%@b as varchar(20)) else set @kq='Không chia được cho 0'
else set @kq='Mời bạn nhập lại phép tính'
end
print +cast(@a as varchar(10))+@dau+cast(@b as varchar(10))+' = '+@kq
exec Pheptinh 1,2,'-'
--Câu 2:
--Viết thủ tục đưa ra số ngày của tháng trong năm dùng output
alter proc SoNgayOutput
(@Thang int, @nam int,@ngay int output)
as
if (@Thang between 1 and 12)
begin
set @ngay=
case
when @thang in (1,3,5,7,8,10,12) then 31
when @thang in (4,6,9,11) then 30
when @thang = 2 and @nam%4 =0 then 29
else 28
end
end
else
print N'Bạn nhập sai tháng'
declare @a int
exec SoNgayOutput 12,2000,@a output
print @a
--Câu 3:
--Viết thủ tục kiểm tra một số có phải là số nguyên tố hay không sử dụng return
alter proc NguyenToR
(@n int)
as
declare @i int, @kq nvarchar(50), @kt bit
set @i=2
set @kt=0
while(@i<@n/2)
begin
if @n%@i=0 set @kt=1
set @i=@i+1
end
if @kt=0 set @kq=CAST(@n as varchar(10))+N' là số nguyên tố'
else set @kq=CAST(@n as varchar(10))+N' không phải là số nguyên tố'
return @kq
exec NguyenToR 6
--Câu 8:
--Viết thủ tục tìm số hoàn hảo từ 2 đến N
alter proc SoHoanHao
(@N int)
as
declare @i int,@a int, @t int, @kq varchar(100)
set @a=1
set @kq=''
while (@a<=@N)
begin
set @i=1
set @t=0
while (@i<@a)
begin
if @a%@i=0 set @t=@t+@i
set @i=@i+1
end
if @a=@t set @kq=@kq +cast(@a as varchar(10))+' '
set @a=@a+1
end
print N'Các số hoàn hảo nhỏ hơn '+cast(@n as varchar(10))+N' là: '+@kq
exec SoHoanHao 1249
--Số hoàn hảo
alter proc SoHoanHaoR
(@N int)
as
declare @i int, @t int, @kq nvarchar(100)
set @kq=''
set @i=1
set @t=0
while (@i<@N)
begin
if @N%@i=0 set @t=@t+@i
set @i=@i+1
end
if @N=@t set @kq=cast(@N as varchar(10))+N' là số hoàn hảo'
else set @kq=cast(@N as varchar(10))+N' không phải là số hoàn hảo'
return @kq
exec SoHoanHaoR 6
Nhãn bài viết: