PDA

View Full Version : Cả nhà ơi, xem đoạn code này dùm mình nha!



minhdao25
20-10-2010, 22:14
Cả nhà ơi, xem đoạn code này dùm mình nha! Mình create đc mà sao k chạy ra kết quả đc.

Đề bài: Viết store nhập vào mã lớp, tên môn học. Thực hiện tăng 1 điểm trên cột điểm cuối cùng của môn học nhập vào cho các sinh viên thuộc lớp đó.

Đây là code của mình nà:

create procedure Cursor_1
@malop varchar(10), @tenmonhoc nvarchar(100)

as
begin

declare curBangDiem cursor for

select SV.Ma, MH.TenMonHoc, KQ.Diem

from SinhVien SV, MonHoc MH, KetQua KQ

where @malop = SV.MaLop and SV.Ma = KQ.MaSinhVien and MH.Ma = KQ.MaMonHoc and MH.TenMonHoc = @tenmonhoc and KQ.LanThi = (select max(KQ1.LanThi from KetQua KQ1 where KQ1.MaMonHoc = KQ.MaMonHoc)

open curBangDiem

declare @maSV varchar(10), @tenMH nvarchar(100), @diem float

fetch next from curBangDiem into @maSV, @tenMH, @diem

while(@@fetch_status=0)
begin

set @diem = @diem + 1
print @maSV+' '+@diem;
fetch next from curBangDiem into @maSV, @tenMH, @diem
end

close curBangDiem
deallocate curBangDiem
end
go

exec Cursor_1 'TH2002/01', 'Toán Cao Cấp A1'


--Mình có file database nhưng k tài nào kèm theo đc, mình thử cả .rar và .text--

serivn
21-10-2010, 21:15
Bạn gặp phải 2 vấn đề sau:

1. Trong đoạn sử dụng CURSOR bạn chưa hề có mệnh đề nào để cập nhật lại thông tin điểm của SV. Cụ thể là bạn chưa dùng câu truy vấn UPDATE. Đoạn code chỉ thực hiện tăng 1 cho biến @diem. Mà biến điểm thì đâu có liên quan gì tới điểm trong Table của bạn, nó chỉ gọi là biến nội bộ (Local Variable) mà thôi.
2. Nếu mình đọc yêu cầu của đề bài thì bạn đâu cần phải dùng tới CURSOR cho nhọc, mà nếu có dùng có khi còn ko có điểm vì tội lòng vòng.

Ở đây, rõ ràng để chỉ yêu cầu cộng thêm một điểm cho tất cả SV có mã lớp và mã môn học theo 2 tham số đầu vào, vậy thì bạn chỉ cần một câu truy vấn Update là OK. Vấn để là bạn chỉ cần Google với cụm từ "SQL Update using Join statement" là sẽ ra vấn đề.

Thêm nữa... Tại sao lại là cập nhật theo tên môn học thay vì mã môn học. Nếu truy vấn cập nhật theo tên môn học thì liệu có chính xác chăng...

minhdao25
24-10-2010, 15:30
Bạn gặp phải 2 vấn đề sau:

1. Trong đoạn sử dụng CURSOR bạn chưa hề có mệnh đề nào để cập nhật lại thông tin điểm của SV. Cụ thể là bạn chưa dùng câu truy vấn UPDATE. Đoạn code chỉ thực hiện tăng 1 cho biến @diem. Mà biến điểm thì đâu có liên quan gì tới điểm trong Table của bạn, nó chỉ gọi là biến nội bộ (Local Variable) mà thôi.
2. Nếu mình đọc yêu cầu của đề bài thì bạn đâu cần phải dùng tới CURSOR cho nhọc, mà nếu có dùng có khi còn ko có điểm vì tội lòng vòng.

Ở đây, rõ ràng để chỉ yêu cầu cộng thêm một điểm cho tất cả SV có mã lớp và mã môn học theo 2 tham số đầu vào, vậy thì bạn chỉ cần một câu truy vấn Update là OK. Vấn để là bạn chỉ cần Google với cụm từ "SQL Update using Join statement" là sẽ ra vấn đề.

Thêm nữa... Tại sao lại là cập nhật theo tên môn học thay vì mã môn học. Nếu truy vấn cập nhật theo tên môn học thì liệu có chính xác chăng...

Hì, mình đã search và sửa đc r. Tks gợi ý của bạn nha :D