| Đăng Kư | Hỏi / Đáp | Lịch | Tìm Kiếm | Bài Trong Ngày | Đánh Dấu Đã Đọc |
|
||||||
![]() |
|
|
Thread Tools | Search this Thread | Display Modes |
|
#1
|
||||
|
||||
|
BÀI TẬP
1. Viết SP có 3 tham số (@masv,@mamh,@lan) để in ra điểm thi trắc nghiệm lần @lan của môn học có mă môn học là @mamh của sinh viên có mă @masv Trả lời: Create Procedure BangDiem @masv char(8) ,@mamh char (5),@lan int As If exsits (Select masv From Link1.QLSV.dbo.diem Where masv=@masv and mamh=@mamh and lan=@lan) then Begin Select masv,hoten From Link1.QLSV.dbo.sinhvien sv inner join Link1.QLSV.dbo.diem d on sv.masv=d.masv Where sv.masv=@masv and d.lan=@lan and d.mamh=@mamh End Else If exsits (Select masv From Link2.QLSV.dbo.diem Where masv=@masv and mamh=@mamh and lan=@lan) Then Begin Select masv,hoten From Link2.QLSV.dbo.sinhvien sv inner join Link2.QLSV.dbo.diem d on sv.masv=d.masv Where sv.masv=@masv and d.lan=@lan and d.mamh=@mamh End 2. Giả sử các phân mănh đều có 1 SP sp_KT_dethi (@mamh,@trinhdo,@socauthi) thực hiện công việc sau: • SP này sẽ trả về 0 nếu số câu trong bộ đề thi của cả 2 cơ sở nhỏ hơn @socauthi. • SP này sẽ trả về 1 nếu số câu trong bộ đề thi trên Server 1 đă đủ để sinh viên thi. • SP này sẽ trả về 1 nếu số câu trong bộ đề thi trên Server 1 và Server 2 đă đủ để sinh viên thi. Dựa vào SP trên, hăy viết 1 SP sp_dethi (@mamh,@trinhdo,@socauthi) trả về 1 bảng chứa các câu hỏi thi đúng tŕnh độ để sinh viên thi. Trả lời: Create Procedure sp_dethi @mamh char(5),@trinhdo char(1),@socauthi smallint,@kq bit As If (@socauthi> (Select count(cauhoi) From Link1.TN.dbo.BODE Where MAMH=@mamh and TRINHDO=@trinhdo Group By MAMH) and (@socauthi>(Select count(cauhoi) From Link2.TN.dbo.BODE Where MAMH=@mamh and TRINHDO=@trinhdo Group By MAMH)) Then Begin @kq=0 End Else If (@socauthi= ((Select count(cauhoi) From Link1.TN.dbo.BODE Where MAMH=@mamh and TRINHDO=@trinhdo Group By MAMH) + ((Select count(cauhoi) From Link2.TN.dbo.BODE Where MAMH=@mamh and TRINHDO=@trinhdo Group By MAMH))) Then Begin @kq=1 End Else If (@socauthi<(Select count(cauhoi) From Link1.TN.dbo.BODE Where MAMH=@mamh and TRINHDO=@trinhdo Group By MAMH)) Then Begin @kq=1 End 3. Viết 1 SP tên Thongtin_Phieu để liệt kê các vật tư trong 1 phiếu có số phiếu là @sophieu. Kết xuất có dạng (TênVT, Sốlượng, Đơngiá, Ngày, Loạiphiếu, HọtênNV) Create Procedure Thongtin_Phieu @sophieu char(8) As Select TENVT,SOLUONG,DONGIA,NGAY,LOAI,HO,TEN From NhanVien nv,Vattu vt,PhatSinh ps, CT_PhatSinh ctps Where ps.PHIEU=@sophieu and ps.PHIEU=ctps.PHIEU and ps.MANV=nv.MANV and ctps.MAVT=vt.MAVT --------- Câu 4 bản quyền của Trung Hải ---------4. Viết 1 SP tên PhieuDiem để liệt kê điểm thi lớn nhất các môn học của 1 sinh viên dựa vào mă sinh viên. Trả lời: Create Procedure PhieuDiem @masv char(8) As SELECT DIEM.MASV, SINHVIEN.HO + ' ' + SINHVIEN.TEN AS hoten,MONHOC.TENMH, MAX(DIEM.DIEM) AS diem FROM DIEM INNER JOIN SINHVIEN ON DIEM.MASV = SINHVIEN.MASV INNER JOIN MONHOC ON DIEM.MAMH = MONHOC.MAMH GROUP BY DIEM.MASV,SINHVIEN.HO,SINHVIEN.TEN,MONHOC.TENMH HAVING(DIEM.MASV = @masv) --------- Câu 4 bản quyền của Trung Hải ---------5. Viết 1 SP tên LayDe để trả về 1 tập các câu hỏi ngẫu nhiên không trùng nhau trong bộ đề. SP này có các tham số: mă môn học, số câu, tŕnh độ. Biết rằng các câu hỏi cần thiết trong 1 bộ đề tại 1 cơ sở có thể không đủ nhưng trên 2 cơ sở th́ đủ. Create Procedure LayDe @mamh char(5),@socau smallint, @trinhdo char(1) As If (@socau>(Select count(cauhoi) From Link1.TN.dbo.BODE Where MAMH=@mamh and TRINHDO=@trinhdo Group By MAMH) or (@socau>(Select count(cauhoi) From Link2.TN.dbo.BODE Where MAMH=@mamh and TRINHDO=@trinhdo Group By MAMH)) Then Begin Select Round((Rand()*(@socau-1)),0)+1 STT,Top @socau MAMH,TRINHDO, NOIDUNG,A,B,C,D From (Select MAMH,TRINHDO,NOIDUNG,A,B,C,D From link1.TN.dbo.BODE Where MAMH=@mamh and TRINHDO=@trinhdo Uion Select MAMH,TRINHDO,NOIDUNG,A,B,C,D From link2.TN.dbo.BODE Where MAMH=@mamh and TRINHDO=@trinhdo) Order by 2 End Else If (@socau=(Select count(cauhoi) From Link1.TN.dbo.BODE Where MAMH=@mamh and TRINHDO=@trinhdo Group By MAMH) Then Begin Select Round((Rand()*@socau),0) STT,Top @socau MAMH,TRINHDO, NOIDUNG,A,B,C,D From link1.TN.dbo.BODE L1 Where L1.MAMH=@mamh and L1.TRINHDO=@trinhdo Order by 2 End 6. Viết 1 view tên DS_NHANVIEN để in ra danh sách tất cả nhân viên trong cả 2 chi nhánh theo thứ tự tăng dần của mỗi chi nhánh, trong từng chi nhánh th́ theo thứ tự tên, nếu trùng tên th́ tiếp tục theo thứ tự họ, kết xuất có dạng : (MACN, MANV, HO, TEN). Create View DS_NHANVIEN As Select MACN, MANV, HO, TEN From ((Select MACN, MANV, HO, TEN From link1.QLVT.dbo.NhanVien Order By HO, TEN) Union (Select MACN, MANV, HO, TEN From link2.QLVT.dbo.NhanVien Order By HO, TEN)) 7. Viết 1 SP để in các phiếu nhập do nhân viên có mă số @manv đă lập trong ngày @ngay. Create procedure PhieuNhap @manv As Select * From Phatsinh ps,CT_PhatSinh ctps Where ps.loai=’N’ and ps.manv=@mavn and ps.phieu=ctps.phieu 8. Viết 1 View tên là DS_Vattu để in ra danh sách tất cả các vật tư có trong công ty. Kết xuất có dạng (MAVT, Tênvậttư). Create View DS_Vattu As Select MAVT,TENVT From VatTu 9. Viết 1 SP để xóa các phiếu nhập do NV có mă số @manv đă lập trong ngày @ngay. Create procedure XoaPhieuNhap @manv char (8), @ngay datetime As Begin Delete Link1.QLVT.dbo.Ct_Phatsinh Where Link1.QLVT.dbo.Phatsinh.manv=@manv and Link1.QLVT.dbo.phatsinh.ngay=@ngay and Link1.QLVT.dbo.phatsinh.loai= ‘N’ and Link1.QLVT.dbo.phatsinh.phieu= Link1.QLVT.dbo.Ct_Phatsinh.phieu Delete Link1.QLVT.dbo.Phatsinh Where Link1.QLVT.dbo.Phatsinh.manv=@manv and Link1.QLVT.dbo.phatsinh.ngay=@ngay and Link1.QLVT.dbo.phatsinh.loai= ‘N’ Delete Link2.QLVT.dbo.Ct_Phatsinh Where Link2.QLVT.dbo.Phatsinh.manv=@manv and Link2.QLVT.dbo.phatsinh.ngay=@ngay and Link2.QLVT.dbo.phatsinh.loai= ‘N’ and Link2.QLVT.dbo.phatsinh.phieu= Link2.QLVT.dbo.Ct_Phatsinh.phieu Delete Link2.QLVT.dbo.Phatsinh Where Link2.QLVT.dbo.Phatsinh.manv=@manv and Link2.QLVT.dbo.phatsinh.ngay=@ngay and Link2.QLVT.dbo.phatsinh.loai= ‘N’ End ---Thấy sai sửa giúp nhé bà con!
Last edited by dieunguyen; 06-29-2010 at 06:07 PM. |
| The Following 11 Users Say Thank You to dieunguyen For This Useful Post: | ||
|
#2
|
||||
|
||||
|
6. Viết 1 view tên DS_NHANVIEN để in ra danh sách tất cả nhân viên trong cả 2 chi nhánh theo thứ tự tăng dần của mỗi chi nhánh, trong từng chi nhánh th́ theo thứ tự tên, nếu trùng tên th́ tiếp tục theo thứ tự họ, kết xuất có dạng : (MACN, MANV, HO, TEN).
Trích:
SELECT ..... UNION SELECT..... ORDERBY Mã:
CREATE VIEW V_DSNHANVIEN AS SELECT TOP 100 PERCENT N.MACN, N.HO ,N.TEN FROM (SELECT MACN,HO,TEN FROM CN1.QLVT.DBO.NHANVIEN UNION SELECT MACN,HO,TEN FROM CN2.QLVT.DBO.NHANVIEN UNION SELECT MACN,HO,TEN FROM CN3.QLVT.DBO.NHANVIEN) N ORDER BY MACN,HO,TEN Trích:
Mã:
CREATE PROC SP_PHIEUNHAP @MANV INT(4), @NGAY SMALLDATETIME(4) AS SELECT V.PHIEU,V.MAVT,V.SOLUONG,V.DONGIA,V.NGAY,V.MANV FROM ( SELECT PS.PHIEU,NGAY,MANV,MAVT,SOLUONG,DONGIA,MAKHO FROM CN1.QLVT.DBO.PHATSINH PS, CN1.QLVT.DBO.CT_PHATSINH CT WHERE PS.PHIEU = CT.PHIEU AND LOAI = 'N' UNION SELECT PS.PHIEU,NGAY,MANV,MAVT,SOLUONG,DONGIA,MAKHO FROM CN2.QLVT.DBO.PHATSINH PS, CN2.QLVT.DBO.CT_PHATSINH CT WHERE PS.PHIEU = CT.PHIEU AND LOAI = 'N' UNION SELECT PS.PHIEU,NGAY,MANV,MAVT,SOLUONG,DONGIA,MAKHO FROM CN3.QLVT.DBO.PHATSINH PS, CN3.QLVT.DBO.CT_PHATSINH CT WHERE PS.PHIEU = CT.PHIEU AND LOAI = 'N') V WHERE MANV = @MANV AND NGAY = @NGAY GO |
| The Following 5 Users Say Thank You to ngngthanhmai For This Useful Post: | ||
chuot3000 (06-29-2010), dieunguyen (06-29-2010), htnhan (06-29-2010), sunflower (06-29-2010), [N_C_T] (06-29-2010) | ||
|
#3
|
||||
|
||||
|
Đây là bài tui giải ^_^ Mấy câu về Thi trắc nghiệm và QLVT do tui ko có DB nên chỉ viết chay . Để áp dụng chạy th́ các bạn nên điều chỉnh lại cho phù hợp .
1.Viết SP có 3 tham số (@masv,@mamh,@lan) để in ra điểm thi trắc nghiệm lần @lan của môn học có mă môn học là @mamh của sinh viên có mă @masv. Mã:
Create proc diem_thi
@masv varchar(10),
@mamh varchar(10),
@lan int
As
If ( exists(select * from link1.ttn.dbo.sinhvien where masv = @masv) )
Select isnull(diem,0)
From link1.ttn.dbo.diem
Where masv =@masv and mamh= @mamh and lan = @lan
else
If ( exists(select * from link2.ttn.dbo.sinhvien where masv = @masv) )
Select isnull(diem,0)
From link2.ttn.dbo.diem
Where masv =@masv and mamh= @mamh and lan = @lan
else
print ‘Ma sinh vien nay khong ton tai’
Đặc biệt câu 2 mọi người thường lầm lẫn giữa cái đề cho và cái đề yêu cầu 2. Giả sử các phân mănh đều có 1 SP sp_KT_dethi (@mamh,@trinhdo,@socauthi) thực hiện công việc sau: - SP này sẽ trả về 0 nếu số câu trong bộ đề thi của cả 2 cơ sở nhỏ hơn @socauthi. - SP này sẽ trả về 1 nếu số câu trong bộ đề thi trên Server 1 đă đủ để sinh viên thi. - SP này sẽ trả về 2 nếu số câu trong bộ đề thi trên Server 1 và Server 2 đă đủ để sinh viên thi. Dựa vào SP trên, hăy viết 1 SP sp_dethi (@mamh,@trinhdo,@socauthi) trả về 1 bản chứa các câu hỏi thi đúng tŕnh độ để sinh viên thi. Mã:
Create proc de_thi @mamh varchar(10), @trinhdo varchar(10), @socauthi int As Declare @kt int Set @kt = (exec sp_kt_dethi @mamh,@trinhdo,@socauthi) If ( @kt =0 ) Print ‘ Khong du cau hoi ’ Else If ( @kt =1 ) Begin Set @@rowcout = @socauthi Select * from link1.ttn.dbo.dethi where mamh = @mamh and trinhdo = @trinhdo End Else Set @@rowcout = @socauthi Select * from link1.ttn.dbo.dethi where mamh = @mamh and trinhdo = @trinhdo UNION Select * from link2.ttn.dbo.dethi where mamh = @mamh and trinhdo = @trinhdo Mã:
Create proc thongtin_phieu
@sophieu int
As
If ( exists(select * from link1.qlvt.dbo.phieu where sophieu = @sophieu) )
Select distinct tenvt,soluong,dongia,ngay,loaiphieu,hotennv
From link1.qlvt.dbo.vattu vt,link1.qlvt.dbo.phieu p ,link1.qlvt.dbo.ct_phieu ctp
Where p.sophieu = @sophieu and ctp.sophieu = p.sophieu and ctp.mavt = vt.mavt
Else
If ( exists(select * from link2.qlvt.dbo.phieu where sophieu = @sophieu))
Select distinct tenvt,soluong,dongia,ngay,loaiphieu,hotennv
From link2.qlvt.dbo.vattu vt, link2.qlvt.dbo.phieu p , link2.qlvt.dbo.ct_phieu ctp
Where p.sophieu = @sophieu and ctp.sophieu = p.sophieu and ctp.mavt = vt.mavt
Else
print ‘ so phieu nay khong ton tai’
Mã:
Create proc phieudiem
@masv varchar(10)
As
If ( exists(select * from link1.ttn.dbo.sinhvien where masv = @masv) )
Select mh.mamh ,tenmh, max(diem)
From link1.ttn.dbo.diem d, link1.ttn.dbo.monhoc mh
Where masv =@masv and d.mamh = mh.mamh
Group by mh.mamh , tenmh
Else
If ( exists(select * from link2.ttn.dbo.sinhvien where masv = @masv) )
Select mh.mamh ,tenmh, max(diem)
From link2.ttn.dbo.diem d, link2.ttn.dbo.monhoc mh
Where masv =@masv and d.mamh = mh.mamh
Group by mh.mamh , tenmh
Else
print ‘Ma sinh vien nay khong ton tai’
Last edited by viet2006; 06-29-2010 at 06:40 PM. |
|
#4
|
||||
|
||||
|
cau 9 có ai test chưa vậy? cho cái kết quả đi
|
|
#5
|
||||
|
||||
|
2. Giả sử các phân mănh đều có 1 SP sp_KT_dethi (@mamh,@trinhdo,@socauthi) thực hiện công việc sau:
• SP này sẽ trả về 0 nếu số câu trong bộ đề thi của cả 2 cơ sở nhỏ hơn @socauthi. • SP này sẽ trả về 1 nếu số câu trong bộ đề thi trên Server 1 đă đủ để sinh viên thi. • SP này sẽ trả về 2 nếu số câu trong bộ đề thi trên Server 1 và Server 2 đă đủ để sinh viên thi. Dựa vào SP trên, hăy viết 1 SP sp_dethi (@mamh,@trinhdo,@socauthi) trả về 1 bảng chứa các câu hỏi thi đúng tŕnh độ để sinh viên thi. Đây là code sp_kt_dt (trong đề ko yêu câu ) create proc sp_kt_dethi @mamh varchar(10), @trinhdo varchar(10), @socauthi int as if (@socauthi <= (select COUNT( * ) from link1.thitracnghiem.dbo.bode where MAMH = @mamh and TRINHDO = @trinhdo)) return 1 else if(@socauthi <= (select COUNT( * ) from link1.thitracnghiem.dbo.bode where MAMH = @mamh and TRINHDO = @trinhdo union select COUNT( * ) from link2.thitracnghiem.dbo.bode where MAMH = @mamh and TRINHDO = @trinhdo)) return 2 else return 0 Đây là code sp de_thi create proc [dbo].[de_thi] @mamh varchar(10), @trinhdo varchar(10), @socauthi int As Declare @kt int exec @kt = sp_kt_dethi @mamh,@trinhdo,@socauthi If ( @kt = 0 ) Print ' Khong du cau hoi ' Else If ( @kt = 1 ) begin Set rowcount @socauthi Select * from link1.thitracnghiem.dbo.bode where mamh = @mamh and trinhdo = @trinhdo end else begin Set rowcount @socauthi Select * from link1.thitracnghiem.dbo.bode where mamh = @mamh and trinhdo = @trinhdo UNION Select * from link2.thitracnghiem.dbo.bode where mamh = @mamh and trinhdo = @trinhdo end Last edited by vnthai; 06-29-2010 at 11:22 PM. |
| The Following 5 Users Say Thank You to vnthai For This Useful Post: | ||
10_ht (07-07-2010), chuot3000 (06-30-2010), | ||
|
#6
|
||||
|
||||
|
Trích:
CREATE PROCEDURE List_BD2 @masv char(10), @mamh char(10), @lan smallint AS SELECT TOP 100 PERCENT ISNULL(CS.DIEM,0) FROM (SELECT MASV ,MAMH,LAN,DIEM FROM THITRACNGHIEM_CS1.THITRACNGHIEM.dbo.BANGDIEM UNION SELECT MASV ,MAMH,LAN,DIEM FROM THITRACNGHIEM_CS2.THITRACNGHIEM.dbo.BANGDIEM) AS CS WHERE @masv=CS.MASV and @mamh=CS.MAMH and @lan=CS.LAN GO |
|
#7
|
||||
|
||||
|
Câu 10 Viết 1 SP để xóa các phiếu nhập do NV có mă số @manv đă lập trong ngày @ngay.
create proc Delete_Phieu1 @Phieu char (8), @manv char(10), @ngay datetime as IF(EXISTS (select * from QLVT_CN1.QLVT.DBO.CT_Phatsinh where Phieu=@phieu)) delete QLVT_CN1.QLVT.dbo.CT_PHATSINH delete QLVT_CN1.QLVT.DBO.PhatSinh where Phieu=@phieu and MANV=@manv and @ngay=NGAY and Loai='N' IF(EXISTS (select * from QLVT_CN2.QLVT.DBO.CT_Phatsinh where Phieu=@phieu )) delete QLVT_CN2.QLVT.dbo.CT_PHATSINH delete QLVT_CN2.QLVT.dbo.PhatSinh where Phieu=@phieu and MANV=@manv and @ngay=NGAY and Loai='N' IF(EXISTS (select * from QLVT_CN3.QLVT.DBO.CT_Phatsinh where Phieu=@phieu)) delete QLVT_CN3.QLVT.dbo.CT_PHATSINH delete QLVT_CN3.QLVT.dbo.PhatSinh where Phieu=@phieu and MANV=@manv and @ngay=NGAY and Loai='N' 8. Viết 1 View tên là DS_Vattu để in ra danh sách tất cả các vật tư có trong công ty. 9. Kết xuất có dạng (MAVT, Tênvậttư). create view PT_Dsvatu as select VT.MAVT,VT.TENVT from ( select * from QLVT_CN1.QLVT.dbo.VATTU UNION select * from QLVT_CN2.QLVT.dbo.VATTU UNION select * from QLVT_CN3.QLVT.dbo.VATTU ) AS VT Last edited by chuot3000; 06-30-2010 at 06:42 AM. |
|
#8
|
||||
|
||||
|
Trích:
Mỗi lần kiểm tra sinh viên chỉ lấy 1 ḍng thôi . C̣n như của bạn th́ lấy hẳn 1 bảng dữ liệu về . Và nếu csdl càng lớn th́ sự khác biệt càng rơ hơn . |
|
#9
|
||||
|
||||
|
Chửi nhau đê, múc nhau đê, xúc nhau đê. Oánh thấy mẹ ló luôn đê
![]()
|
|
#10
|
||||
|
||||
|
Trích:
Mã:
CREATE VIEW V_DSVT AS SELECT MAVT,TENVT FROM VATTU |
![]() |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
(View-All)
Members who have read this thread : 40
|
|
|
ĐDL, 10_ht, Admin, anril, azn_prince911, bigbang, Boys♥Girls, chuot3000, crazysaint, Cu Tí, Diem Thuy, dieunguyen, duyquang, enterus01, Firehouse, hacker_007, htnhan, Kakalot, kato004, longtu71, luckydragon, luulixanh, |
| Thread Tools | Search this Thread |
| Display Modes | |
|
|
|