nguyenviettho
05-05-2011, 23:29
Em có 1 bảng tbl_bangdiem với các trường như sau :
Ma_BD int tự tăng,
Ma_SV char (khóa phụ link đến bảng khác),
Ma_mon int (khóa phụ link đến bảng khác),
Hoc_ky int,
Lan_thi int giá trị mặc định =1,
Diem_DD (điểm điểm danh) float giá trị mặc định =5,
Diem_DK (điểm điều kiện) float giá trị mặc định =3,
Diem_thi float giá trị mặc định =0
Bài toán của em bao h cũng nhập Diem_DD và Diem_DK trước rồi sau đó mới đến điểm thi. Ở đây chưa quan tâm đến điểm thi vội. Nhu cầu bài toán của em như sau : khi nhập điểm Diem_DD và Diem_DK (insert vào bảng tbl_bangdiem) thì sẽ có trigger kiểm tra nếu Diem_DD <5 hoặc Diem_DK <3 thì sẽ tự động insert thêm 1 bảng ghi với Lan_thi=+2 còn các thông tin như Ma_SV, Ma_mon,Hoc_ky thì giống như bản cũ (có thể chưa quan tâm ở đây) . em có demo 1 trigger đã đáp ứng đc gần hết mọi yêu cầu của đầu bài tuy nhiên có 1 lỗi là bản ghi sau nó ko lấy được giá trị Ma_SV từ bản ghi trước mà toàn lấy =1 .
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[kiem_tra_DK_thi]
on [dbo].[tbl_bangdiem]
for insert
as
begin
declare @diem_cc float
declare @diem_dk float
declare @Ma_SV char
declare @Ma_mon char
declare @Hoc_ky int
declare @Lan_thi int
select @diem_dk=Diem_DK from inserted
select @diem_cc = Diem_DD from inserted
select @Ma_SV = Ma_SV from inserted
select @Ma_mon = Ma_mon from inserted
select @Hoc_ky = Hoc_ky from inserted
select @Lan_thi = Lan_thi from inserted
if @diem_cc < 5 or @diem_dk<3
begin
insert into tbl_bangdiem(Ma_SV,Ma_mon,Hoc_ky,Lan_thi)
values(@Ma_SV,@Ma_mon,@Hoc_ky,(@Lan_thi+1))
end
end
[=========> Bổ sung bài viết <=========]
uppppppppppppppppppppppppppppppppppppppppp
[=========> Bổ sung bài viết <=========]
không có ai à :(..................
Ma_BD int tự tăng,
Ma_SV char (khóa phụ link đến bảng khác),
Ma_mon int (khóa phụ link đến bảng khác),
Hoc_ky int,
Lan_thi int giá trị mặc định =1,
Diem_DD (điểm điểm danh) float giá trị mặc định =5,
Diem_DK (điểm điều kiện) float giá trị mặc định =3,
Diem_thi float giá trị mặc định =0
Bài toán của em bao h cũng nhập Diem_DD và Diem_DK trước rồi sau đó mới đến điểm thi. Ở đây chưa quan tâm đến điểm thi vội. Nhu cầu bài toán của em như sau : khi nhập điểm Diem_DD và Diem_DK (insert vào bảng tbl_bangdiem) thì sẽ có trigger kiểm tra nếu Diem_DD <5 hoặc Diem_DK <3 thì sẽ tự động insert thêm 1 bảng ghi với Lan_thi=+2 còn các thông tin như Ma_SV, Ma_mon,Hoc_ky thì giống như bản cũ (có thể chưa quan tâm ở đây) . em có demo 1 trigger đã đáp ứng đc gần hết mọi yêu cầu của đầu bài tuy nhiên có 1 lỗi là bản ghi sau nó ko lấy được giá trị Ma_SV từ bản ghi trước mà toàn lấy =1 .
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[kiem_tra_DK_thi]
on [dbo].[tbl_bangdiem]
for insert
as
begin
declare @diem_cc float
declare @diem_dk float
declare @Ma_SV char
declare @Ma_mon char
declare @Hoc_ky int
declare @Lan_thi int
select @diem_dk=Diem_DK from inserted
select @diem_cc = Diem_DD from inserted
select @Ma_SV = Ma_SV from inserted
select @Ma_mon = Ma_mon from inserted
select @Hoc_ky = Hoc_ky from inserted
select @Lan_thi = Lan_thi from inserted
if @diem_cc < 5 or @diem_dk<3
begin
insert into tbl_bangdiem(Ma_SV,Ma_mon,Hoc_ky,Lan_thi)
values(@Ma_SV,@Ma_mon,@Hoc_ky,(@Lan_thi+1))
end
end
[=========> Bổ sung bài viết <=========]
uppppppppppppppppppppppppppppppppppppppppp
[=========> Bổ sung bài viết <=========]
không có ai à :(..................