#1  
Tuổi 06-29-2010, 09:49 AM
dieunguyen's Avatar
dieunguyen dieunguyen vẫn chưa cĂ³ mặt trong diá»…n đàn
Nhân Viên
 
Ngày tham gia: Oct 2008
Bài Viết: 317
Thanks: 51
Thanked 24 Times in 7 Posts
Send a message via Yahoo to dieunguyen
Unhappy Giải bài tập CSDL Phân Tán

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.
Reply With Quote
The Following 11 Users Say Thank You to dieunguyen For This Useful Post:
10_ht (07-07-2010), Admin (06-30-2010), bigbang (06-29-2010), Boys♥Girls (06-29-2010), chuot3000 (06-29-2010), duyquang (06-29-2010), htnhan (06-29-2010), Kakalot (06-29-2010), ngngthanhmai (06-29-2010), sunflower (06-29-2010), [N_C_T] (06-29-2010)
  #2  
Tuổi 06-29-2010, 06:00 PM
ngngthanhmai's Avatar
ngngthanhmai ngngthanhmai vẫn chưa cĂ³ mặt trong diá»…n đàn
Mod Đẹp
 
Ngày tham gia: Jun 2008
Bài Viết: 561
Thanks: 51
Thanked 205 Times in 37 Posts
Mặc định

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:
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)
Câu này sai cấu trúc phải là :
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
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.

Trích:
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
Cái này nếu đứng ở toàn cục th́ dùng được


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




Signature: Thế này cho nó x́ tin Con ơi! Khi con c̣n thơ dại
Mẹ đă mất rất nhiều thời gian
Mẹ dạy con cầm th́a, dùng đũa ăn cơm
Mẹ dạy con buộc dây giày, chải tóc, lau nước mũi
Những kỉ niệm mẹ con ḿnh sống bên nhau làm mẹ nhớ thương da diết
V́ thế, khi mẹ chóng quên, mẹ chậm lời
Con hăy cho mẹ chút thời gian
Cho mẹ suy nghĩ thêm
Cho dù cuối cùng ngay cả định nói ǵ...
Mẹ cũng quên....

Con ơi! con quên là mẹ đă tập cho con
Con mới thuộc khúc đồng giao đầu đời
Con nhớ không mỗi ngày mẹ đáp
Nên nếu mẹ lỡ kể nhiều lần câu chuyện món răng
Ngâm nga những khúc ru con thời bé
Xin con tha thứ cho mẹ
Xin con cho mẹ ch́m trong những hồi ức ấy nhé
Xin con đáp lời mẹ kể những chuyện vụn vặt trong nhà!

Con ơi giờ mẹ thường quên cài nút áo, xỏ dây giày
Ăn cơm văi đầy vạt áo
Chải đầu tay bần bật run
Đừng giục giă mẹ
Xin con nhẫn nại chút và dịu dàng thêm
Mẹ chỉ cần có con ở bên! Mẹ đủ ấm
Reply With Quote
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  
Tuổi 06-29-2010, 06:21 PM
viet2006's Avatar
viet2006 viet2006 đang trong diễn đàn
Nhân Viên
 
Ngày tham gia: Sep 2008
Đến từ: Thành phố mang tên Bác
Bài Viết: 1.307
Thanks: 29
Thanked 96 Times in 38 Posts
Mặc định

Đâ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
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)
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’
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.

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’




Signature: Thế này cho nó x́ tin Cuộc sống ở trên đời này thật giống như là bị cưỡng gian vậy, khiến người ta chỉ có hai lựa chọn: một là phản kháng, hai là hưởng thụ. C̣n nghề nghiệp th́ lại tựa như một ả lẳng lơ, ngươi không "cưỡi" th́ sẽ có người khác "cưỡi”. C̣n xă hội ư, nó thật giống như là việc ḿnh tự an ủi ḿnh vậy, tất cả mọi thứ đều phải dựa vào chính đôi tay của ḿnh để giải quyết thôi!

Click the image to open in full size.

Last edited by viet2006; 06-29-2010 at 06:40 PM.
Reply With Quote
The Following 4 Users Say Thank You to viet2006 For This Useful Post:
chuot3000 (06-29-2010), htnhan (06-29-2010), sunflower (06-29-2010), [N_C_T] (06-29-2010)
  #4  
Tuổi 06-29-2010, 10:13 PM
htnhan's Avatar
htnhan htnhan vẫn chưa cĂ³ mặt trong diá»…n đàn
Nhân Viên
 
Ngày tham gia: Dec 2008
Bài Viết: 123
Thanks: 11
Thanked 3 Times in 3 Posts
Mặc định

cau 9 có ai test chưa vậy? cho cái kết quả đi




Reply With Quote
  #5  
Tuổi 06-29-2010, 10:44 PM
vnthai's Avatar
vnthai vnthai vẫn chưa cĂ³ mặt trong diá»…n đàn
Trai Bao Các Quận
 
Ngày tham gia: Sep 2008
Bài Viết: 80
Thanks: 27
Thanked 43 Times in 10 Posts
Mặc định

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.
Reply With Quote
The Following 5 Users Say Thank You to vnthai For This Useful Post:
10_ht (07-07-2010), chuot3000 (06-30-2010), ngngthanhmai (06-30-2010), viet2006 (06-29-2010), [N_C_T] (06-30-2010)
  #6  
Tuổi 06-30-2010, 05:53 AM
chuot3000's Avatar
chuot3000 chuot3000 vẫn chưa cĂ³ mặt trong diá»…n đàn
Nhân Viên
 
Ngày tham gia: Jun 2008
Bài Viết: 741
Thanks: 38
Thanked 20 Times in 12 Posts
Mặc định

Trích:
Nguyên văn bởi viet2006 View Post
Đâ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’
M̀NH LÀM CAU NÀY THEO CÁCH NHƯ SAU SẼ TỐI ƯU HƠN V̀ PHẦN KIỂM TRA MASV KHÔNG PHẢI THỰC HIỆN NHIỀU LẦN VÀ TỐC ĐỘ TRUY VẤN SẼ NHANH HƠN
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




Signature: Thế này cho nó x́ tin Click the image to open in full size.
Reply With Quote
  #7  
Tuổi 06-30-2010, 06:32 AM
chuot3000's Avatar
chuot3000 chuot3000 vẫn chưa cĂ³ mặt trong diá»…n đàn
Nhân Viên
 
Ngày tham gia: Jun 2008
Bài Viết: 741
Thanks: 38
Thanked 20 Times in 12 Posts
Mặc định

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




Signature: Thế này cho nó x́ tin Click the image to open in full size.

Last edited by chuot3000; 06-30-2010 at 06:42 AM.
Reply With Quote
  #8  
Tuổi 06-30-2010, 08:27 AM
viet2006's Avatar
viet2006 viet2006 đang trong diễn đàn
Nhân Viên
 
Ngày tham gia: Sep 2008
Đến từ: Thành phố mang tên Bác
Bài Viết: 1.307
Thanks: 29
Thanked 96 Times in 38 Posts
Mặc định

Trích:
Nguyên văn bởi chuot3000 View Post
M̀NH LÀM CAU NÀY THEO CÁCH NHƯ SAU SẼ TỐI ƯU HƠN V̀ PHẦN KIỂM TRA MASV KHÔNG PHẢI THỰC HIỆN NHIỀU LẦN VÀ TỐC ĐỘ TRUY VẤN SẼ NHANH HƠN
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
H̀nh như Thành bị lầm lẫn đó ^_^ .
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 .




Signature: Thế này cho nó x́ tin Cuộc sống ở trên đời này thật giống như là bị cưỡng gian vậy, khiến người ta chỉ có hai lựa chọn: một là phản kháng, hai là hưởng thụ. C̣n nghề nghiệp th́ lại tựa như một ả lẳng lơ, ngươi không "cưỡi" th́ sẽ có người khác "cưỡi”. C̣n xă hội ư, nó thật giống như là việc ḿnh tự an ủi ḿnh vậy, tất cả mọi thứ đều phải dựa vào chính đôi tay của ḿnh để giải quyết thôi!

Click the image to open in full size.
Reply With Quote
  #9  
Tuổi 06-30-2010, 12:15 PM
Firehouse's Avatar
Firehouse Firehouse đang trong diễn đàn
Dead or Alive
 
Ngày tham gia: Jun 2008
Bài Viết: 601
Thanks: 47
Thanked 30 Times in 16 Posts
Mặc định

Chửi nhau đê, múc nhau đê, xúc nhau đê. Oánh thấy mẹ ló luôn đê




Signature: Thế này cho nó x́ tin Heaven or Hell
Reply With Quote
  #10  
Tuổi 06-30-2010, 12:39 PM
ngngthanhmai's Avatar
ngngthanhmai ngngthanhmai vẫn chưa cĂ³ mặt trong diá»…n đàn
Mod Đẹp
 
Ngày tham gia: Jun 2008
Bài Viết: 561
Thanks: 51
Thanked 205 Times in 37 Posts
Mặc định

Trích:
Nguyên văn bởi chuot3000 View Post
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 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
Table VATTU là nhân bản nên đâu cần select từng phân mănh. Chỉ cần :
Mã:
CREATE VIEW V_DSVT AS
SELECT MAVT,TENVT FROM VATTU
Câu này thầy sữa rồi.




Signature: Thế này cho nó x́ tin Con ơi! Khi con c̣n thơ dại
Mẹ đă mất rất nhiều thời gian
Mẹ dạy con cầm th́a, dùng đũa ăn cơm
Mẹ dạy con buộc dây giày, chải tóc, lau nước mũi
Những kỉ niệm mẹ con ḿnh sống bên nhau làm mẹ nhớ thương da diết
V́ thế, khi mẹ chóng quên, mẹ chậm lời
Con hăy cho mẹ chút thời gian
Cho mẹ suy nghĩ thêm
Cho dù cuối cùng ngay cả định nói ǵ...
Mẹ cũng quên....

Con ơi! con quên là mẹ đă tập cho con
Con mới thuộc khúc đồng giao đầu đời
Con nhớ không mỗi ngày mẹ đáp
Nên nếu mẹ lỡ kể nhiều lần câu chuyện món răng
Ngâm nga những khúc ru con thời bé
Xin con tha thứ cho mẹ
Xin con cho mẹ ch́m trong những hồi ức ấy nhé
Xin con đáp lời mẹ kể những chuyện vụn vặt trong nhà!

Con ơi giờ mẹ thường quên cài nút áo, xỏ dây giày
Ăn cơm văi đầy vạt áo
Chải đầu tay bần bật run
Đừng giục giă mẹ
Xin con nhẫn nại chút và dịu dàng thêm
Mẹ chỉ cần có con ở bên! Mẹ đủ ấm
Reply With Quote
Trả lời


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, ngngthanhmai, nguoibien248, nKt, ooogaconne, phandang88, protranphong, sunflower, t1192001, thaonguyenxanh, thienminhnguyen, thientuoc, thuyha, tran tinh, Uchiha Itachi, viet2006, vnthai, Z, [N_C_T]
Thread Tools Search this Thread
Search this Thread:

Tìm Kiếm Nâng Cao
Display Modes

Quuyền Hạn Của Bạn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Bật
Smilies đang Bật
Mã [IMG] đang Bật
Mã HTML đang Tắt

Chuyển Đến Mục


Múi giờ là GMT +8. Bây giờ là 10:08 AM.
Được trang bị vBulletin® Phiên bản 3.8.2
Bản quyền ©2000 - 2010. Powered by Tinhochbu.Net
Diễn Đàn Mở - Không Trực Thuộc ĐHHB