chua bai tap-on tap
TRANSCRIPT
![Page 1: chua bai tap-on tap](https://reader031.vdocuments.pub/reader031/viewer/2022012314/577ccefc1a28ab9e788e9374/html5/thumbnails/1.jpg)
1
--Câu1:
--Viết thủ tục lưu trữ có tên sp_DTB với mô tả như sau:
-- Tham số đầu vào: MaSV
-- Tham số đầu ra: Điểm trung bình chung của sinh viên có MaSV trên.
--Yêu cầu: kiểm tra MaSV có tồn tại trong bảng KetQua, nếu vi phạm thì đưa ra
--thông báo lỗi.
create proc sp_dtb (@ma char(6))
as
begin
declare @masv char(6),@diemtb float
if exists ( select masv from KetQua )
begin
select @masv=masv, @diemtb=round(AVG(diem),1)
from KetQua
group by masv
having masv=@ma
print @ma +N' có điểm trung binh la:'+ cast(@diemtb as char(6))
end
else
raiserror( 'ma sinh vien khong ton tai',16,1)
end
go
-- thuc thi thu tuc
exec sp_dtb 'sv0001'
exec
--Câu 2:
-- Tạo trigger cho hành động chèn dữ liệu vào bảng Khoa và MonHoc,
-- kiểm tra các ràng buộc toàn vẹn sau:
-- Số CBGD của mỗi khoa phải lớn hơn 10 người
-- Mã môn học (6 kí tự) phải tuân theo qui tắc sau: 2 ký tự đầu là ‘MH”,
-- 4 ký tự sau biểu thị số kí tự. Ví dụ: MH0001
--Nếu không thỏa mãn ràng buộc trên thì hủy hành động chèn.
--trigger 1
create trigger KTSlgv_khoa
on khoa
for insert
as
begin
declare @socbgd int
![Page 2: chua bai tap-on tap](https://reader031.vdocuments.pub/reader031/viewer/2022012314/577ccefc1a28ab9e788e9374/html5/thumbnails/2.jpg)
2
select @socbgd =socbgd from inserted
if (@socbgd<10)
begin
print 'so luong gv cua khoa phai >10'
rollback tran
end
else
print 'chen thanh cong'
end
---kích hoạt trigger
insert into khoa
values ('dl', N'động lực', 9)
insert into khoa
values ('dl', N'động lực', 19)
--trigger 2
create trigger kt_mamh
on monhoc
for insert
as
begin
declare @2kt char(2),@s1 char(1),@s2 char(1), @s3 char(1), @s4 char(1)
select @2kt=left(mamh,2) from inserted
select @s1=substring(mamh,3,1) from inserted
select @s2=substring(mamh,4,1) from inserted
select @s3=substring(mamh,5,1) from inserted
select @s4=substring(mamh,6,1) from inserted
if (@2kt='MH' and @s1 in (0,1,2,3,4,5,6,7,8,9)
and @s2 in (0,1,2,3,4,5,6,7,8,9)
and @s3 in (0,1,2,3,4,5,6,7,8,9)
and @s4 in (0,1,2,3,4,5,6,7,8,9))
print 'chen hop le, ma mon hoc thoa man'
else
begin
print 'khong thanh cong'
rollback tran
end
end
---
insert into monhoc
values('mh0007', N'triết học', 30,10)
insert into monhoc
values('mh009u', N'triết học', 30,10)
insert into monhoc
values('mt0090', N'triết học', 30,10)
DẠNG BÀI THI
![Page 3: chua bai tap-on tap](https://reader031.vdocuments.pub/reader031/viewer/2022012314/577ccefc1a28ab9e788e9374/html5/thumbnails/3.jpg)
3
Cho CSDL QLBH gồm các bảng sau:
LoaiSanPham (MaLoaiSP: nvarchar(10), TenLoaiSP : nvarchar(15), MoTa : nvarchar (16))
SanPham (MaSP: nvarchar(10), TenSP: nvarchar(40), HinhSP nvarchar(50), MaNhaCC:
nvarchar(10), MaLoaiSP: nvarchar(10), DVT nvarchar(20), DonGia: smallint, SoLuong:
smallint, SoLuongTT: smallInt, Discontinued: bit)
NhaCungCap (MaNhaCC: nvarchar(10), TenNhaCC: nvarchar(40), DiaChi: nvarchar(60),
Phone: nvarchar(24), Fax: nvarchar(24), Hompage: nvarchar (16))
Câu 1:Viết các câu lệnh T-SQL thực hiện các yêu cầu sau:
a) Hiển thị danh sách các sản phẩm với đầy đủ các thông tin sau: Loại sản phẩm, mã sản
phẩm, tên sản phẩm sắp xếp giảm dần theo tên sản phẩm
SELECT l.*, s.masp, s.tensp
From loaisanpham l, sanpham s
Where l.maloaisp=s.maloaisp
Order by s.tensp desc
b) Liệt kê các loại sản phẩm và số sản phẩm thuộc loại sản phẩm đó
SELECT l.maloaisp, l.tenloaisp, count(s.masp) as slsp
From loaisanpham l, sanpham s
Where l.maloaisp=s.maloaisp
Group by l.maloaisp, l.tenloaisp
c) Liệt kê các sản phẩm trong kho mà số lượng đã ở mức tối thiểu. Các thông tin gồm: Mã
loại sản phẩm, tên sản phẩm, mã sản phẩm, số lượng trong kho và số lượng ở mức tối
thiểu
Select maloaisp, masp, tensp, soluong, soluongtt
From sanpham
Where soluong=soluongtt
d) Liệt kê các sản phẩm và số lượng các sản phẩm thuộc loại sản phẩm này đã ở mức tối
thiểu
Select masp, tensp, soluong
From sanpham
Where soluong=soluongtt
e) Liệt kê những nhà cung cấp và số sản phẩm do họ cung cấp
Select c.manhacc, c.tennhacc, sum(s.soluong) as slsp
From nhacungcap c, sanpham s
Where c.mamhacc=s.manhacc
Group by c.manhacc, c.tennhacc
f) Liệt kê các loại sản phẩm có tối đa 10 sản phẩm
SELECT l.maloaisp, l.tenloaisp, count(s.masp) as slsp
From loaisanpham l, sanpham s
Where l.maloaisp=s.maloaisp
Group by l.maloaisp, l.tenloaisp
Having count(s.masp) =10
![Page 4: chua bai tap-on tap](https://reader031.vdocuments.pub/reader031/viewer/2022012314/577ccefc1a28ab9e788e9374/html5/thumbnails/4.jpg)
4
Câu 2:Thủ tục lưu trữ - Store Procedure
Viết thủ tục lưu trữ có tên sp_SoLuongSP được mô tả như sau:
- Tham số vào: MaNhaCC.
- Tham số ra: số lượng tất cả sản phẩm ứng với mã nhà cung cấp đó.
Yêu cầu: Kiểm tra MaNhaCC có tồn tại trong bảng SanPham, nếu vi phạm thì thông
báo lỗi.
Create proc sp_SoLuongSP (@manhacc nvarchar(10))
as
Begin
Declare @macc nvarchar(10)
Declare @sl int
If exists (select manhacc from sanpham, nhacungcap where
nhacungcap.manhacc=sanpham.manhacc)
begin
Select Manhacc, @sl=sum(soluong)
From sanpham
Where manhacc=@manhacc
Group by Manhacc
Print ‘nha cc’+ ‘ ’+ @manhacc+ ‘ co tong sl sp la ’ + cast (@sl as varchar(3))
End
Else
begin
Print ‘Ma nha cc nay khong ton tai’
return
end
end
Câu 3 Trigger
Viết trigger cho hành động chèn dữ liệu trên bảng SanPham. Biết rằng: chỉ được phép
chèn thông tin sản phẩm khi đã tồn tại MaNhaCC và MaLoaiSP cung cấp hàng. Nếu
không thỏa mãn điều kiện trên thì hủy hành động chèn.
create trigger kt_maCC_maLoaiSP
on sanpham
for insert
as
begin
if exists (select inserted.maloaisp from inserted, loaisanpham
where loaisanpham.maloaisp=inserted.maloaisp)
if exists (select inserted.manhacc from inserted, nhacungcap
![Page 5: chua bai tap-on tap](https://reader031.vdocuments.pub/reader031/viewer/2022012314/577ccefc1a28ab9e788e9374/html5/thumbnails/5.jpg)
5
where nhacungcap.manhacc=inserted.manhacc)
print 'chen hop le, ma mon hoc thoa man'
else
begin
print 'khong thanh cong'
rollback tran
end
end
Các ví dụ trên lớp
use QLSV
select * from kq
select * from lop
select * from sv
select * from mh
--vd1: hien thi thong tin cua cac sv ho nguyen
select * from sv
where ht like 'nguyen %'
--vd2: hien thi thong tin cua 2 sv ho nguyen dau tien
select top 2 * from sv
where ht like 'nguyen %'
--vd3: hien thi thong tin cua sv: masv, ht, tuoi
select masv, ht, tuoi=YEAR(getdate())-YEAR(ngaysinh)
from sv
--
select masv, ht, tuoi=YEAR(getdate())-YEAR(ngaysinh)
from sv
order by YEAR(getdate())-YEAR(ngaysinh)
--vd4: thong tin cua 1 sinh vien co dieml1 cua cac mon >=8,
--masv, ht, dieml1
select top 1 sv.masv, ht, dieml1
from sv, kq
where sv.masv =kq.masv and kq.dieml1>=8
![Page 6: chua bai tap-on tap](https://reader031.vdocuments.pub/reader031/viewer/2022012314/577ccefc1a28ab9e788e9374/html5/thumbnails/6.jpg)
6
---
TOP (expression) [PERCENT]
[ WITH TIES ]
select top 4 masv, ht, tuoi=YEAR(getdate())-YEAR(ngaysinh)
from sv
--
select top 4 WITH TIES masv, ht, tuoi=YEAR(getdate())-YEAR(ngaysinh)
from sv
order by YEAR(getdate())-YEAR(ngaysinh) desc
--
select * from mh
--vd5: hien thi thong tin cuA CAC mh co stc cao nhat
--c1:
select mamh, tenmon, sotc as maxstc from mh
where sotc>=all(select sotc from mh)
--c2
select top 1 with ties mamh, tenmon, sotc
from mh
order by sotc desc
--vd6: tinh so luong sv cua CSDL
select count(masv) as slsv from sv
--vd7: tinh so luong sv cua moi lop
--malop, tenlop, slsv
select lop.malop,tenlop, slsv= count(masv)
from lop left join sv on lop.malop=sv.malop
group by lop.malop,tenlop
--c2
select lop.malop,tenlop, slsv= count(masv)
from lop , sv
where lop.malop=sv.malop
group by lop.malop,tenlop
--vd8 hien thi slsv cua lop
--co cac ma '101091' va '601112'
--c1
select lop.malop,tenlop, slsv= count(masv)
from lop left join sv on lop.malop=sv.malop
where lop.malop ='101091' or lop.malop= '601112'
group by lop.malop,tenlop
--c2
select lop.malop,tenlop, slsv= count(masv)
from lop left join sv on lop.malop=sv.malop
where lop.malop in ('101091','601112')
group by lop.malop,tenlop
--vd9: tinh diem tbl1 thuoc ki 1 cua moi sv
--masv, ht, diemtbl1
select sv.masv ,ht,
diemtbl1 = round(SUM(dieml1*sotc)/SUM(sotc),2)
from sv, kq, mh
where sv.masv =kq.masv and kq.mamh =mh.mamh and kyhoc=1
group by sv.masv ,ht
--vd10: hien thi thong tin cua cac sv co diemtbl1 thuoc
--ki 1>=6.6
select sv.masv ,ht,
diemtbl1 = round(SUM(dieml1*sotc)/SUM(sotc),2)
from sv, kq, mh
where sv.masv =kq.masv and kq.mamh =mh.mamh and kyhoc=1
![Page 7: chua bai tap-on tap](https://reader031.vdocuments.pub/reader031/viewer/2022012314/577ccefc1a28ab9e788e9374/html5/thumbnails/7.jpg)
7
group by sv.masv ,ht
having round(SUM(dieml1*sotc)/SUM(sotc),2)>=6.6
---vd11: hien thi thong tin cua cac sv co diemtbl1 cao nhat
--thuoc ki 1
select top 1 with ties sv.masv ,ht,
diemtbl1 = round(SUM(dieml1*sotc)/SUM(sotc),2)
from sv, kq, mh
where sv.masv =kq.masv and kq.mamh =mh.mamh and kyhoc=1
group by sv.masv ,ht
order by round(SUM(dieml1*sotc)/SUM(sotc),2) desc
--vd12: hien thi: slmh, sumsotc, avgsotc, maxsotc, minsotc
select COUNT(mamh) as slmh,SUM(sotc) as sumsotc,
avg(sotc) as avgsotc, MAX(sotc) as maxsotc,
MIN(sotc) as minsotc
from mh
--vd13: hien thi tt cua sv: masv, ht, gt
--va thong ke slsv trong bang sv
select masv, ht, gt
from sv
compute count(masv)
--
select * from mh
--compute count(mamh),sum(sotc), max(sotc), avg(sotc), min(sotc)
compute max(sotc)
--
select MAX(sotc) from mh
--vd14
--group by: --vd7: tinh so luong sv cua moi lop
--malop, tenlop, slsv
select lop.malop,tenlop,slsv= count(masv)
from lop , sv
where lop.malop=sv.malop
group by lop.malop,tenlop
--compute by
select lop.malop,tenlop, sv.masv, ht
from lop , sv
where lop.malop=sv.malop
order by lop.malop,tenlop
compute count(sv.masv) by lop.malop,tenlop
--vd15
select sv.masv ,ht,
diemtbl1 = round(SUM(dieml1*sotc)/SUM(sotc),2) into kqsv
from sv, kq, mh
where sv.masv =kq.masv and kq.mamh =mh.mamh and kyhoc=1
group by sv.masv ,ht
--Hien thi thong tin cua bang kqsv: masv, ht, diemtbl1, hocluc
select masv, ht, diemtbl1,
hocluc= case
when diemtbl1>=9 then 'xuat sac'
when diemtbl1>=8 then 'Gioi'
when diemtbl1>=7 then 'Kha'
when diemtbl1>=6 then 'TB'
else 'Kem'
end
![Page 8: chua bai tap-on tap](https://reader031.vdocuments.pub/reader031/viewer/2022012314/577ccefc1a28ab9e788e9374/html5/thumbnails/8.jpg)
8
from kqsv
--vd16: 2 bang sv, sv2 co cau truc giong nhau
--tren 3 cot: masv, ht, gt
--yeu cau: chen 2 ban ghi dau tien cua
--bang sv vao bang sv2
insert into sv2
select top 2 masv, ht, gt from sv
--
select * into svtam from sv
--sua (thay doi) que cua sv co ma sv01 thanh hai duong
update svtam
set qq='Hai duong'
where masv='sv01'
--sua thong tin ve qq cua 3 sv dau tien trong ds thanh 'Ninh Binh'
update top (3) svtam
set qq='Ninh Binh'
--xoa thong tin cua cac sv nu khoi bang svtam
delete from svtam
where gt='nu'
--xoa tt cua 4 sv dau tien trong bang svtam
delete top (4) from svtam
select * from svtam
---
--Phan hang rank()
--vd1: phan hang mon hoc theo sotc
select mamh, tenmon,sotc,
Rank() over (order by sotc) as rank_sotc
from mh
--
select mamh, tenmon,sotc,
Rank() over(partition by sotc order by mamh) as ranks
from mh
--- phan hang theo vung
Select masv, HT, YEAR(ngaysinh) AS namsinh, GT,
rank()over (partition by gt order by YEAR(ngaysinh) desc)
as xephang
from SV
---
Select masv, HT, YEAR(ngaysinh) AS namsinh, GT,
rank()over (partition by masv order by YEAR(ngaysinh) desc)
as xephang
from SV
--vd2: xep hang theo tuoi cua sv dua vao DENSE_RANK
select masv, ht, datediff(yy, ngaysinh,getdate())as tuoi
,DENSE_RANK() OVER
(ORDER BY datediff(yy, ngaysinh, getdate())) AS 'XHANG_DENSE_RANK'
FROM sv
--where datediff(yy, ngaysinh, getdate()) is not null
--VD3:phân hạng theo tuổi dùng hàm row_number()
select masv, ht, datediff(yy, ngaysinh, getdate())AS TUOI
![Page 9: chua bai tap-on tap](https://reader031.vdocuments.pub/reader031/viewer/2022012314/577ccefc1a28ab9e788e9374/html5/thumbnails/9.jpg)
9
,ROW_NUMBER() OVER
(ORDER BY datediff(yy, ngaysinh, getdate())) AS 'Row Number'
FROM sv
--vd4: phan hang voi ham NTILE
select masv, ht, datediff(yy, ngaysinh, getdate())as tuoi
,NTILE(7) OVER (ORDER BY datediff(yy, ngaysinh, getdate())) AS 'Quartile'
FROM Sv
-- truy van co tat cac cac hàm phan hang
select masv, ht, datediff(yy, ngaysinh, getdate())as tuoi
,ROW_NUMBER() OVER (ORDER BY datediff(yy, ngaysinh, getdate())) AS 'Row Number'
,RANK() OVER (ORDER BY datediff(yy, ngaysinh, getdate())) AS 'Rank'
,DENSE_RANK() OVER (ORDER BY datediff(yy, ngaysinh, getdate())) AS 'Dense Rank'
,NTILE(5) OVER (ORDER BY datediff(yy, ngaysinh, getdate())) AS 'Ntile'
FROM sv
where datediff(yy, ngaysinh, getdate()) is not null
---
select @@VERSION
select masv, hoten, ROW_NUMBER()
OVER (ORDER BY masv) AS 'Row Number'
from sv
---
select masv, mamh, dieml1,
RANK() OVER (ORDER BY dieml1) AS 'Rank'
from kq
order by masv
--khai bao bien
declare @i int
set @i=100
print 'gt i='+cast(@i as char(5))
print @i
thủ tục
-vd2: viết thủ tục lưu có tác dụng nhập dữ liệu vào bảng lop
-- biết rằng thông tin cần nhập được truyền thông qua các tham số
create proc sp_nhaplop
(@mal char(10), @tenl nvarchar(30))
as
begin
insert into lop values(@mal, @tenl)
end
---,
create proc chenSV (
@malop char(10),
@Masv char(10),
@Hoten nvarchar(50),
@NS datetime,
@QQ nvarchar(50),
@kqht float
)as
begin
if(exists (select Malop from lop where malop =@malop))
insert into sv values (@malop, @masv, @hoten,@ns, @qq, @kqht)
else
print ‘ Không chèn được’
end
![Page 10: chua bai tap-on tap](https://reader031.vdocuments.pub/reader031/viewer/2022012314/577ccefc1a28ab9e788e9374/html5/thumbnails/10.jpg)
10
----
exec sp_nhaplop '101131', 'Tk11.3'
select * from lop
--vd3: viết thủ tục lưu có tác dụng tính số lượng sv của một lớp
-- biêt rằng, thủ tục này có tham số truyền vào là mã lớp
create proc sp_slsv
(@malop char(10))
as
begin
select lop.malop, COUNT(sv.masv)as sl
from lop left join sv on lop.malop =sv.malop
group by lop.malop
having lop.malop =@malop
end
---
exec sp_slsv '101091'
---
alter proc sp_slsv
(@malop char(10)='101091')
as
begin
declare @ma char(10),@ssv int
select @ma=lop.malop, @ssv=COUnT(sv.masv)
from lop left join sv on lop.malop =sv.malop
group by lop.malop
having lop.malop =@malop
print 'mã lớp:'+@ma +'có số sv là:'+
cast(@ssv as char(3))
end
---
exec sp_slsv
exec sp_slsv '101131'
---vd4
create proc dieml1
@masv char(10)
as
select sv.masv, sum(dieml1*sotc)/sum(sotc) as dtbl1
from sv, mh, diem
where sv.masv= diem.masv and diem.mamon= mh.mamon
and sv.masv=@masv
group by sv.masv
---
---Ví du: tra ve so ngày trong tháng khi biet tháng và nam
--VD2:
Create Proc spr_Days (@Thang Int, @Nam Int)
As
Declare @SN Int
Set @SN = Case
When @Thang In (1,3,5,7,8,10,12) Then 31
When @Thang In (4,6,9,11) Then 30
When @Nam % 4 = 0 Then 29
Else 28
End
--Return @SN
print @sn
Go
exec spr_Days 2, 2012
exec spr_Days 2, 2013
![Page 11: chua bai tap-on tap](https://reader031.vdocuments.pub/reader031/viewer/2022012314/577ccefc1a28ab9e788e9374/html5/thumbnails/11.jpg)
11
---
--Ví du: TINH TONG S = 1 + 3 + 5 +… + (2N-1)
alter Proc TongLe ( @N int )
AS
DECLARE @I int, @S int
SET @I = 1
SET @S = 0
WHILE @I <= 2*@N -1
BEGIN
--WAITFOR DELAY '00:00:00.001'
Set @S = @S + @I
Set @I = @I + 2
END
--Return @S
print @S
exec TongLe 5
---xóa thủ tục lưu
drop proc sp_nhaplop
---
--vd3_tong 2 so, co tham so output
create procedure Tong_Output
@a int,
@b int,
@c int output
as
select @c = @a + @b
print @c
Trigger --vd2--trigger cho su kien insert tren bang tt t/m:
-- moi de tai co toi da 3 sv tham gia
CREATE trigger sLsv_dt on tt
for insert
as
begin
if((select count (t1.masv)
from tt as t1, inserted t2
where t1.madt =t2.madt)<=3)
BEGIN
print 'da nhap du lieu thanh cong'
end
else
begin
print 'Khong the co qua 3 sv tham gia 1 de tai'
rollback tran
end
end
go
--kiem tra trigger
use ttsv
SELECT * FROM tt ORDER BY Madt
SELECT * FROM sv
SELECT * FROM dt
--
insert into tt
![Page 12: chua bai tap-on tap](https://reader031.vdocuments.pub/reader031/viewer/2022012314/577ccefc1a28ab9e788e9374/html5/thumbnails/12.jpg)
12
values('sv6','dt2','Hung Yen', 7.8)
--
insert into tt
values('sv5','dt1','lào cai', 7.8)
--
---sua trigger
alter trigger sosv_dt on tt
for insert
as
begin
if((select count (t1.masv)
from tt as t1, inserted t2
where t1.madt =t2.madt)<=3)
BEGIN
print 'da nhap du lieu thanh cong'
--lay thong tin ve ten de tai
declare @tdt varchar(30), @sosv int
select @tdt=t1.tendt
from dt as t1, tt as t2, inserted as t3
where t1.madt=t2.madt and t2.madt=t3.madt
--lay so luong sv tuong ung
select @sosv=count(t1.masv)
from tt as t1, inserted t2
where t1.madt=t2.madt
---in: ten dt, soluong sv
print 'De tai: '+@tdt +' hien co: '+cast(@sosv as varchar)+ ' sinh vien'
end
else
begin
print 'Khong the co qua 3 sv tham gia 1 de tai'
rollback tran
end
end
go
--VD3: khong cho phep sua du lieu cua
--cot hoten trong bang sV
select * from sv
update sv
set GT='NU'
where masv='sv03'
---
SELECT * FROM SV
---
create TRIGGER NoUpdateHT
ON sV
FOR UPDATE AS
IF UPDATE (HT)
BEGIN
PRINT 'Khong duoc UPDATE tren cot ht'
ROLLBACK TRANSACTION
END
---kiem tra trigger
update sv
![Page 13: chua bai tap-on tap](https://reader031.vdocuments.pub/reader031/viewer/2022012314/577ccefc1a28ab9e788e9374/html5/thumbnails/13.jpg)
13
set ht='tran thi anh'
where masv='sv2'
---vi du 4: viet trigger cho su kien xoa du lieu tren
--bang lop
--thi thong tin lien quan cung bi xoa theo
--
ALTER TABLE DT ALTER COLUMN MADT NCHAR(10) NOT NULL
ALTER TABLE DT ADD CONSTRAINT DT_P PRIMARY KEY(MADT)
drop trigger deletelop
exec sp_helptext xoa_lop
SELECT * FROM LOP
SELECT * FROM SV
create trigger deletelop on lop
for delete
as
begin
if(@@rowcount <=0)
print 'khong co lop nao trong bang'
else
begin
delete sv from SV as s, deleted as d
where s.malop=d.malop
end
end
go
---
delete from lop
where malop='tk71'
select * from lop
select * from sv
EXEC SP_HELPTEXT XOA_LOP
--VD5:
-- viet trigger tren bang lop:
--chi xoa nhung lop chua co sv
---
create TRIGGER xoa_ttlop ON lop
INSTEAD OF delete
AS
BEGIN
If (Select count(*) from sv, Deleted d
where sv.malop=d.malop)>0
BEGIN
RAISERROR ('khong xoa duoc', 16, 1)
ROLLBACK TRAN
END
ELSE
BEGIN
DELETE FROM lop WHERE
malop IN(SELECT malop FROM DELETED)
PRINT 'xoa duoc'
END
![Page 14: chua bai tap-on tap](https://reader031.vdocuments.pub/reader031/viewer/2022012314/577ccefc1a28ab9e788e9374/html5/thumbnails/14.jpg)
14
END
GO
---
select * from lop
select * from sv
--thu xoa
delete from LOP
where MALOP='101121'
delete from LOP
where MALOP='101104'
---vd: thực hiệnviệc cập nhật điểm trên cột điểm l1 và điểm l2
create TRIGGER In_up_diem
ON dbo.Diem
FOR INSERT, UPDATe
AS
--Bang diem(Masv nchar(10),Mamon chAr(10),
--DiemL1 float,DiemL2 floAT)
Declare @msv nchar(10)
Declare @mamh char(10)
declare @dl1 float
declare @dl2 float
-- Lay gia tri cho 4 truong
Set @msv=(Select Masv from inserted )
set @mamh=(select mamon from inserted)
set @dl1=(select dieml1 from inserted)
set @dl2=(select dieml2 from inserted)
-- TH1. Neu masv ton tai roi, thi tien hanh Update
if(exists(select masv from diem where
masv=@msv))
begin
-- Ktra diemlan1
if(@dl1<5)
Update Diem set dieml2=@dl2
where masv=@msv and mamon=@mamh
else
begin
set @dl2=null
Update Diem set dieml2 =@dl2
where Masv=@msv and mamon=@mamh
end
end
-- TH2. Neu masv chua ton tai,
-- nhap moi Insert
else
Begin
-- kiem tra diem lan 1
if (@dl1<5)
Insert into Diem
values(@msv,@mamh, @dl1,@dl2)
![Page 15: chua bai tap-on tap](https://reader031.vdocuments.pub/reader031/viewer/2022012314/577ccefc1a28ab9e788e9374/html5/thumbnails/15.jpg)
15
else
begin
set @dl2 =null
Insert into Diem
values (@msv,@mamh,@dl1,@dl2)
End
end
-----
insert into diem values ('sv04', 'mh4',1,0)
insert into diem values ('sv04', 'mh2',8,6)
--
update diem
set dieml2=9
where masv='sv03' and mamon='mh1'
--
update diem
set dieml2=9
where masv='sv04' and mamon='mh1'