HQT CSDL
Bài 2: THIẾT KẾ BẢNG ẢO VỚI MANAGEMENT STUDIO
Tạo các view cho CSDL QLBanhang:
1. Hiển thị danh sách các vật tư trong bảng VATTU với các thông tin mã vật tư, tên vật tư
2. Hiển thị thông tin đơn hàng chi tiết với: Số đơn hàng, mã vật tư, số lượng đặt, ngày đặt hàng, và tên nhà cung cấp
3. Hiển thị các thông tin chi tiết phiếu nhập trong ngày 20/01/2002, các thông tin hiển thị gồm: Số phiếu nhập, số đơn hàng, mã vật tư, tên vật tư, số lượng nhập, đơn giá nhập
SELECT dbo.CTDONDH.SoDH, dbo.CTDONDH.MaVT, dbo.VATTU.MaVT AS Expr1, dbo.VATTU.TenVTu, dbo.CTPNHAP.SlNhap, dbo.CTPNHAP.DgNhap
FROM dbo.CTPNHAP INNERJOIN
dbo.VATTU ON dbo.CTPNHAP.MaVT = dbo.VATTU.MaVT INNERJOIN
dbo.CTDONDH ON dbo.CTPNHAP.MaVT = dbo.CTDONDH.MaVT INNERJOIN
dbo.DONDH ON dbo.CTDONDH.SoDH = dbo.DONDH.SoDH
WHERE (dbo.DONDH.NgayDH =CONVERT(DATETIME,'2002-01-20 00:00:00', 102))
4. Hiển thị thông tin chi tiết của phiếu xuất X003, các thông tin hiển thị gồm: Mã vật tư, số lượng xuất, đơn giá xuất, ngày xuất, tên khách hàng
SELECT dbo.CTPXUAT.MaVT, dbo.CTPXUAT.SlXuat, dbo.PXUAT.Ngayxuat, dbo.PXUAT.TenKH
FROM dbo.CTPXUAT INNERJOIN
dbo.PXUAT ON dbo.CTPXUAT.SoPX = dbo.PXUAT.SoPX
WHERE (dbo.CTPXUAT.MaVT ='X003')
Bài 3: THIẾT KẾ CƠ SỞ DỮ LIỆU VỚI CÁC PHÁT BIỂU T-SQL DẠNG ĐỊNH NGHĨA DỮ LIỆU
Yêu cầu: Thực hiện lại tất cả các yêu cầu từ 1à4 của Bài 1 và tất cả các yêu cầu của Bài 2 bằng cách sử dụng các phát biểu T-SQL đã học. (Lưu ý: khi thực hiện tạo các bảng ở ý 2, cần kết hợp luôn với các yêu cầu về ràng buộc dữ liệu và khóa ngoại ở ý 3,4).
Tạo các view cho CSDL QLBanhang:
1. Hiển thị danh sách các vật tư trong bảng VATTU với các thông tin mã vật tư, tên vật tu
createview Vw_vattu
withencryption
as
select MaVT,TenVTu from VATTU
2. Hiển thị thông tin đơn hàng chi tiết với: Số đơn hàng, mã vật tư, số lượng đặt, ngày đặt hàng, và tên nhà cung cấp
createview Vw_Thongtin
withencryption
as
SELECT CTDONDH.SoDH, CTDONDH.MaVT, CTDONDH.SlDat, DONDH.NgayDH, NCC.TenNCC
FROM CTDONDH, NCC,DONDH
where CTDONDH.SoDH = DONDH.SoDH and DONDH.MaNCC = NCC.MaNCC
3. Hiển thị các thông tin chi tiết phiếu nhập trong ngày 20/01/2002, các thông tin hiển thị gồm: Số phiếu nhập, số đơn hàng, mã vật tư, tên vật tư, số lượng nhập, đơn giá nhập
createview Vw_ThongtinPNhap
withencryption
as
SELECT CTDONDH.SoDH, VATTU.MaVT, VATTU.TenVTu, CTPNHAP.SlNhap, CTPNHAP.DgNhap
FROM CTPNHAP,VATTU ,CTDONDH ,DONDH
WHERE (DONDH.NgayDH =CONVERT(DATETIME,'2002-01-20 00:00:00', 102))
and CTPNHAP.MaVT = VATTU.MaVT and CTPNHAP.MaVT = CTDONDH.MaVT
and CTDONDH.SoDH = DONDH.SoDH
4. Hiển thị thông tin chi tiết của phiếu xuất X003, các thông tin hiển thị gồm: Mã vật tư, số lượng xuất, đơn giá xuất, ngày xuất, tên khách hàng
createview Vw_TTpx
withencryption
as
SELECT CTPXUAT.MaVT,CTPXUAT.SlXuat, PXUAT.Ngayxuat, PXUAT.TenKH
FROM CTPXUAT ,PXUAT
WHERE (CTPXUAT.MaVT ='X003')and CTPXUAT.SoPX = PXUAT.SoPX
BÀI 4: Truy vấn lựa chọn/chèn/sửa/xóa
1. Trong CSDL QLBanhang thực hiện các truy vấn sau:
a) Hiển thị danh sách các vật tư trong bảng VATTU (sắp xếp theo thứ tự tên vật tư giảm dần)
SELECT MaVTu, TenVTu, DvTinh, PhanTram
FROM VATTU
ORDERBY TenVTu DESC
b) Hiển thị danh sách các thông tin trong bảng CTPNHAP, có bổ sung thêm cột thành tiền biết rằng Thành tiền = SlNhap*DgNhap
SELECT SoPN, MaVT, SlNhap, DgNhap, SlNhap * DgNhap AS'Thanh Tien'
FROM CTPNHAP
c) Sử dụng mệnh đề COMPUTE BY để hiển thị các thông tin: Mã vật tư, số lượng nhập, đơn giá nhập trong bảng CTPNHAP và có bổ sung dòng thống kê: Tổng số lượng nhập, giá nhập thấp nhất, giá nhập cao nhất cho từng vật tư.
SELECT MaVT, SlNhap, DgNhap
FROM CTPNHAP
ORDERBY MaVT
computesum(SlNhap),min(DgNhap),max(DgNhap)
BY MaVT
d) Hiển thị danh sách các nhà cung cấp (mã nhà cung cấp và tên nhà cung cấp) đã từng được đặt hàng (dữ liệu không trùng lặp)
SELECT DISTINCT NCC.MaNCC, NCC.TenNCC, NCC.Diachi
FROM NCC INNERJOIN
DONDH ON NCC.MaNCC = DONDH.MaNCC
e) Làm tương tự ý d cho các nhà cung cấp có hàng đã được xuất (hoặc nhập)
danh sách nhà cung cấp có hàng được nhập:
SELECTDISTINCT NCC.MaNCC, NCC.TenNCC, NCC.Diachi
FROM DONDH INNERJOIN
NCC ON DONDH.MaNCC = NCC.MaNCC INNERJOIN
PNHAP ON DONDH.SoDH = PNHAP.SoDH
f) Hiển thị danh sách các đơn đặt hàng gần đây nhất trong bảng DONDH
SELECT SoDH, NgayDH, MaNCC
FROM DONDH
WHERE NgayDH=(SELECT MAX(NgayDH)FROM DONDH )
g) Hiển thị danh sách các phiếu xuất hàng gồm các cột: số phiếu xuất và tổng trị giá, dữ liệu được sắp xếp theo cột tổng trị giá giảm dần
SELECT SoPX, SlXuat * DgXuat AS'TongGT'
FROM CTPXUAT
ORDERBY TongGT DESC
h) Hiển thị danh sách các vật tư có trong bảng đơn đặt hàng cùng với tổng số lượng nhập/xuất tương ứng
SELECT VATTU.MaVTu, VATTU.TenVTu,SUM(CTPNHAP.SlNhap)AS'Tổng Nhập',SUM(CTPXUAT.SlXuat)AS'Tổng Xuất'
FROM PXUAT INNERJOIN
CTPXUAT INNERJOIN
VATTU ON CTPXUAT.MaVTu = VATTU.MaVTu ON PXUAT.SoPX = CTPXUAT.SoPX INNERJOIN
PNHAP INNERJOIN
CTPNHAP ON PNHAP.SoPN = CTPNHAP.SoPN INNERJOIN
DONDH ON PNHAP.SoDH = DONDH.SoDH ON VATTU.MaVTu = CTPNHAP.MaVT
GROUPBY VATTU.MaVTu, VATTU.TenVTu,SlNhap,SlXuat,DONDH.SoDH,PXUAT.SoPX, PNHAP.SoPN
i) Làm tương tự ý h song chỉ chọn ra 2 bản ghi thứ 2 và thứ 3 trong kết quả tìm được
with DanhSachVT
as
(SELECT VATTU.MaVTu, VATTU.TenVTu,SUM(CTPNHAP.SlNhap)AS'TongNhap',SUM(CTPXUAT.SlXuat)AS'TongXuat',row_number()over(orderby VATTU.MaVTu)as'Sodong'
FROM PXUAT INNERJOIN
CTPXUAT INNERJOIN
VATTU ON CTPXUAT.MaVTu = VATTU.MaVTu ON PXUAT.SoPX = CTPXUAT.SoPX INNERJOIN
PNHAP INNERJOIN
CTPNHAP ON PNHAP.SoPN = CTPNHAP.SoPN INNERJOIN
DONDH ON PNHAP.SoDH = DONDH.SoDH ON VATTU.MaVTu = CTPNHAP.MaVT
GROUPBY VATTU.MaVTu, VATTU.TenVTu,SlNhap,SlXuat,DONDH.SoDH,PXUAT.SoPX, PNHAP.SoPN
select MaVTu, TenVTu,TongNhap, TongXuat from DanhSachVT where(Sodong>=2 and Sodong<=3)
2. Tạo các truy vấn thực hiện:
a) Xóa các đơn đặt hàng trong bảng DONDH mà ngày đặt hàng là 15/01/2002
deletefrom DONDH where NgayDH=convert(datetime,'15/01/2002',103)
b) Sử dụng Insert into để chèn lại các dòng dữ liệu đã bị xóa ở ý a
insertinto DONDH values('D007',convert(datetime,'15/01/2002',103),'C02')
c) Cập nhật lại giá xuất cho các vật tư trong bảng CTPXUAT mà giá xuất hiện thời <4000000, giá trị cập nhật mới bằng bình phương của giá trị cũ
update CTPXUAT set DgXuat=DgXuat*DgXuat where DgXuat<4000000
d) Sử dụng hàm Datename kiểm tra xem trong số các đơn đặt hàng đã có, có tồn tại đơn đặt hàng nào được lập vào ngày chủ nhật hay không, nếu có, in ra chi tiết đơn hàng (số đơn hàng, mã vật tư, số lượng đặt hàng)
select CTDONDH.SoDH,MaVT,SlDat from CTDONDH,DONDH where CTDONDH.SoDH= CTDONDH.SoDH and datename(dw,NgayDH)='Sunday'
e) Đếm số đơn đặt hàng cho mã vật tư DD01, hiển thị các thông tin tương ứng, trong đó ngày đặt hàng được hiển thị theo định dạng dd/mm/yy
select VATTU.MaVT,TenVTu,count(VATTU.MaVT)as'TongDH',convert(datetime,NgayDH,103)as'NgayDH'
from CTDONDH,DONDH,VATTU where VATTU.MaVT=CTDONDH.MaVT and CTDONDH.SoDH=CTDONDH.SoDH and CTDONDH.MaVT='DD01'
groupby VATTU.MaVT,TenVTu,NgayDH
f) Xóa đi dữ liệu ở trường Số lượng đặt của một số bản ghi trong bảng CTDONDH, sau đó sử dụng hàm isnull kiểm tra và cập nhật lại giá trị = 0 cho các bản ghi đó
select isnull(SlDat,0) from CTDONDH
Bài 5: Bài tập về các cấu trúc điều khiển
1. Viết câu lệnh If thực hiện các yêu cầu sau:
a) Cho biết đơn giá xuất trung bình của hàng hóa “Đầu DVD Hitachi 1 đĩa” trong bảng CTPXUAT là bao nhiêu, nếu > 4000000 thì in ra thông báo “Không nên thay đổi giá bán”, ngược lại in ra thông báo “Nên tăng giá bán”
declare @tb money
select @tb=avg(DgXuat)
from CTPXUAT,VATTU
where (CTPXUAT.MaVTu=VATTU.MaVTu and TenVTu like N'Đầu Hitachi 1 đĩa')
print 'Tong don gia xuat hien tai: '
Print @tb
if @tb>4000000
print 'Khong nen thay doi gia ban'
else
print 'Nen tang gia ban'
b) Sử dụng hàm Datename để tính xem có đơn đặt hàng nào đã được lập vào ngày chủ nhật không? Nếu có thì in ra danh sách các đơn đặt hàng đó, nếu không, in ra thông báo “Các ngày lập các đơn đặt hàng đều hợp lệ”
if exists(select NgayDH from DONDH where datename(dw,NgayDH)='Sunday' )
select * from DONDH where datename(dw,NgayDH)='Sunday'
else
print 'Cac ngay lap don dat hang deu hop le'
c) Đếm số lần nhập hàng cho đơn đặt hàng DD01, in ra thông báo tương ứng (cho cả trường hợp đơn đặt hàng chưa được nhập hàng lần nào)
if (select count(SoPN) from CTPNHAP where MaVTu='DD01' )>0
select CTPNHAP.MaVTu,TenVTu,count(SoPN) as 'So lan nhap' from CTPNHAP,VATTU where VATTU.MaVTu=CTPNHAP.MaVTu and CTPNHAP.MaVTu='DD01' group by CTPNHAP.MaVTu,TenVTu
else
print 'Danh sach vat tu co don dat hang nhung chua duoc nhap'
select VATTU.MaVTu,TenVTu,'0' as 'So lan nhap' from VATTU,CTDONDH where CTDONDH.MaVTu='DD01' and VATTU.MaVTu=CTDONDH .MaVTu
2. Viết câu lệnh While:
a) Tạo bảng VATTU_Temp có cấu trúc bảng gồm 2 cột MaVTu, TenVTu và dữ liệu giống dữ liệu trong bảng VATTU. Sau đó sử dụng cú pháp While viết đoạn chương trình xóa từng dòng dữ liệu trong bảng VATTU_Temp với điều kiện câu lệnh bên trong vòng lặp mỗi khi được thực hiện chỉ được phép xóa một dòng dữ liệu, khi đang xóa có hiển thị thông báo “Đang xóa vật tư ”+ Tên vật tư ra màn hình
select MaVTu,TenVTu into VATTU_Temp from VATTU
declare @ma char(4), @ten nvarchar(100)
Declare cur2_Vattu Cursor dynamic scroll
For select * from VATTU_Temp
Open cur2_Vattu
--print'Dang xoa du lieu : '
Fetch First from cur2_Vattu into @ma,@ten
while @@Fetch_status=0
print 'Dang xoa ban ghi co ma '+@ma+', Ten: '+@ten
delete from VATTU_Temp where MaVTu=@ma
Fetch next from cur2_Vattu into @ma,@ten
end
Close cur2_Vattu
Deallocate cur2_Vattu
b) Trong bảng VATTU_Temp bổ sung thêm 2 cột mới: SoPX char(4), DgXuat Float. Kiểm tra đơn giá trung bình của vật tư DD01 trong bảng CTPXUAT, nếu đơn giá trung bình còn < 4000000 thì tăng đơn giá lên 5% cho các vật tư DD01. Kết thúc vòng lặp, cho biết đã thực hiện việc tăng giá bao nhiêu lần trong vòng lặp. Trong mỗi lần tăng, chèn thêm dòng dữ liệu đã tăng vào bảng VATTU_Temp nhằm lưu lại các giá trị trong quá trình tăng đơn giá (dữ liệu lấy từ bảng CTPXUAT và VATTU)
--Trong bảng VATTU_Temp bổ sung thêm 2 cột mới: SoPX char(4), DgXuat Float.
--Kiểm tra đơn giá trung bình của vật tư DD01 trong bảng CTPXUAT,
--nếu đơn giá trung bình còn < 4000000 thì tăng đơn giá lên 5% cho các vật tư DD01.
-- Kết thúc vòng lặp, cho biết đã thực hiện việc tăng giá bao nhiêu lần trong vòng lặp.
--Trong mỗi lần tăng,
-- chèn thêm dòng dữ liệu đã tăng vào bảng VATTU_Temp
-- nhằm lưu lại các giá trị trong quá trình tăng đơn giá
--(dữ liệu lấy từ bảng CTPXUAT và VATTU)
--
select MaVT,TenVTu into VATTU_Temp from VATTU
alter table VATTU_Temp
add SoPX char(4), DgXuat Float
declare @tb money,@dem int,@dg money,@ma char(4),@ten nvarchar(100),@spx char(4)
set @ma='DD01'
select @ten=TenVTu from VATTU where VATTU.MaVT=@ma
select @tb=avg(DgXuat),@dg=DgXuat from CTPXUAT where MaVT='DD01' group by DgXuat
if (@tb<4000000)
update CTPXUAT set DgXuat=@dg*1.05 where MaVT=@ma
Declare cur2_Vattu Cursor dynamic scroll
For select SoPX,MaVT,DgXuat from CTPXUAT where MaVT=@ma
Open cur2_Vattu
Fetch first from cur2_Vattu into @spx,@ma,@dg
--Open cur2_Vattu
while (@tb<4000000)
insert into VATTU_Temp values (@ma,@ten,@spx,@dg)
set @tb=avg(@dg)
set @dg=@dg*1.05
update CTPXUAT set DgXuat=@dg where MaVT=@ma
Fetch next from cur2_Vattu into @spx,@ma,@dg
end
Close cur2_Vattu
Deallocate cur2_Vattu
3. Sử dụng biểu thức Case lồng vào các lệnh truy vấn cần thiết để thực hiện các yêu cầu sau:
a) Liệt kê danh sách các đơn đặt hàng trong bảng DONDH bổ sung thêm cột hiển thị thứ trong tuần của ngày đặt hàng
select *,
'Thu'=Case (datepart(day,NgayDH))
when 1 then 'Chu Nhat'
when 2 then 'Thu Hai'
when 3 then 'Thu Ba'
when 4 then 'Thu Tu'
when 5 then 'Thu Nam'
when 6 then 'Thu Sau'
when 7 then 'Thu Bay'
end
from DONDH
b) Giảm đơn giá của các hàng hóa bán ra trong tháng 01/2002 theo quy tắc:
- Không giảm nếu số lượng < 4
- Giảm 5% nếu 4<= số lượng < 10
- Giảm 10% nếu số lượng >=10
update CTPXUAT
DgXuat=case
when SlXuat<=4 then DgXuat*0.95
when SlXuat >=10 then DgXuat*0.9
end
where SoPX=(select SoPX from PXUAT where convert(char(7), Ngayxuat,21)='2002/01')
THỦ TỤC NỘI TẠI
1. Xem lại các ví dụ trong bài giảng và xây dựng lại các thủ tục sau:
a. Thủ tục tính số lượng đặt hàng với tên spud_DONDH_TinhSLDat gồm 2 tham số vào là: số đơn đặt hàng và mã vật tư, 1 tham số ra là: số lượng đặt hàng của một vật tư trong đơn đặt hàng đó. Trước khi tính cần kiểm tra xem các giá trị được truyền vào cho 2 tham số Số đơn hàng và Mã vật tư có tồn tại hay không
createproc spud_DONDH_TinhSLDat
@sdh char(4),@mvt char(4)
as
declare @tong int
ifexists(select SoDH,MaVT from CTDONDH where SoDH=@sdh and MaVT=@mvt)
(select @tong=sum(SlDat)from CTDONDH where SoDH=@sdh and MaVT=@mvt)
print'Tong so luong dat la: '
printstr(@tong)
end
else
print'Khong ton tai don hang nao thoa man'
exec spud_DONDH_TinhSLDat @sdh ='D001',@mvt ='DD01'
b. Thủ tục tính tổng số lượng đã nhập hàng với tên spud_PNHAP_TinhtongSLNhang gồm 2 tham số vào là: số đơn hàng và mã vật tư, 1 tham số ra là tổng số lượng đã nhập hàng của vật tư trong đơn đặt hàng đó. Trước khi tính cần kiểm tra xem các giá trị được truyền vào cho 2 tham số Số đơn hàng và Mã vật tư có tồn tại hay không
createproc spud_PNHAP_TinhtongSLNhang
@sdh char(4),@mvt char(4)
as
declare @tong int
ifexists(select DONDH.SoDH,CTPNHAP.MaVT from CTPNHAP,DONDH,CTDONDH where CTDONDH.MaVT = CTPNHAP.MaVT and CTDONDH.SoDH = DONDH.SoDH and DONDH.SoDH=@sdh and CTDONDH.MaVT=@mvt )
(select @tong=sum(SlNhap)from CTPNHAP,DONDH,CTDONDH where CTDONDH.MaVT = CTPNHAP.MaVT and CTDONDH.SoDH = DONDH.SoDH and DONDH.SoDH=@sdh and CTDONDH.MaVT=@mvt )
print'Tong so luong nhap la: '
printstr(@tong)
end
else
print'Khong ton tai don hang nao thoa man'
exec spud_PNHAP_TinhtongSLNhang @sdh ='D001',@mvt ='DD01'
2. Xây dựng các thủ tục cập nhật dữ liệu cho bảng VATTU sau:
a.
Thủ tục spud_VATTU_Them để thêm mới dữ liệu cho bảng VATTU với 4 tham số đầu vào là 4 giá trị ứng với các cột trong bảng: mã vật tư, tên vật tư, đơn vị tính, phần trăm. Trước khi thêm dữ liệu vào bảng cần kiểm tra ràng buộc mã vật tư là duy nhất
createproc spud_VATTU_Them
@mvt char(4),@tenvt nvarchar(100),@dvtinh nvarchar(10), @phantram real
as
ifexists(select MaVTu from VATTU where MaVTu=@mvt)
print'Vat tu nay da ton tai trong co so du lieu- Ban khong the them'
else
insertinto VATTU values(@mvt,@tenvt ,@dvtinh, @phantram)
print'Ban da them thanh cong!'
end
exec spud_VATTU_Them @mvt='DD15',@tenvt='Tu lanh',@dvtinh='Chiec', @phantram=30
b. Thủ tục spud_VATTU_Xoa để xóa một vật tư khỏi bảng với tham số vào là mã vật tư cần xóa. Trước khi xóa cần kiểm tra ràng buộc dữ liệu về khóa ngoại (chỉ xóa khi mã vật tư truyền vào chưa có trong các bảng CTDONDH, CTPXUAT CTPXUAT,TONKHO)
createproc spud_VATTU_Xoa
@mvt char(4)
as
ifexists(select VATTU.MaVTu from CTDONDH,CTPXUAT,VATTU, TONKHO,DONDH where TONKHO.MaVTu = CTPXUAT.MaVTu and TONKHO.MaVTu = VATTU.MaVTu AND CTPXUAT.MaVTu = VATTU.MaVTu and CTDONDH.SoDH = DONDH.SoDH)
print'Vat tu nay khong the xoa khoi co so du lieu'
else
deletefrom VATTU where MaVTu=@mvt
print'Ban da xoa thanh cong!'
exec spud_VATTU_Xoa @mvt='VD20'
c. Thủ tục spud_VATTU_Sua để sửa dữ liệu cho một vật tư trong bảng, tham số vào là 4 giá trị: mã vật tư, tên vật tư, đơn vị tính và phần trăm
createproc spud_VATTU_Sua
@mvt char(4),@tenvt nvarchar(100),@dvtinh nvarchar(10), @phantram real
as
ifexists(select MaVTu from VATTU where MaVTu=@mvt )
update VATTU set MaVTu=@mvt, TenVTu=@tenvt, DvTinh=@dvtinh, PhanTram=@phantram
print'Update thanh cong cho vat tu co ma: '+ @mvt
end
else
print'Ban ghi nay hien khong co trong co so du lieu!'
exec spud_VATTU_Sua @mvt='DD01',@tenvt='nth2',@dvtinh='nth2', @phantram= 100
3. Tạo các thủ tục nội tại liệt kê dữ liệu sau:
a. Thủ tục spud_VATTU_BaocaoDSach, liệt kê các cột trong bảng vật tư theo thứ tự tên vật tư tăng dần
createproc spud_VATTU_BaocaoDSach
as
select*into #DanhsachVT
from VATTU
orderby TenVTu
select*from #DanhsachVT
exec spud_VATTU_BaocaoDSach
b. Thủ tục spud_PXUAT_Baocaopxuat để liệt kê các cột dữ liệu trong 2 bảng PXUAT và CTPXUAT có hiển thị thêm 1 cột tên vật tư có trong bảng vật tư, tham số vào là số phiếu xuất để lọc dữ liệu có giá trị mặc định là NULL. Khi gọi thực hiện thủ tục, nếu không truyền giá trị cho số phiếu xuất thì thủ tục liệt kê tất cả các phiếu xuất có trong bảng số phiếu xuất
createproc spud_PXUAT_Baocaopxuat
@spx char(4)=null
as
if @spx=null
SELECT CTPXUAT.SoPX, CTPXUAT.MaVTu, VATTU.TenVTu, VATTU.DvTinh, VATTU.PhanTram, PXUAT.Ngayxuat, CTPXUAT.SlXuat, CTPXUAT.DgXuat,
PXUAT.TenKH
FROM CTPXUAT leftjoin PXUAT on CTPXUAT.SoPX = PXUAT.SoPX,VATTU
where CTPXUAT.MaVTu = VATTU.MaVTu
else
SELECT CTPXUAT.SoPX, CTPXUAT.MaVTu, VATTU.TenVTu, VATTU.DvTinh, VATTU.PhanTram, PXUAT.Ngayxuat, CTPXUAT.SlXuat, CTPXUAT.DgXuat,
PXUAT.TenKH
FROM CTPXUAT , PXUAT ,VATTU
where CTPXUAT.MaVTu = VATTU.MaVTu and CTPXUAT.SoPX = PXUAT.SoPX
exec spud_PXUAT_Baocaopxuat @spx='X005'
4. Xây dựng các thủ tục nội tại cho bảng TONKHO
a. Hãy tạo thủ tục cập nhật dữ liệu cho bảng Tồn kho
createproc spud_TONKHO_update
@nt char(6),@mvt char(4),@sld int,@tongN int, @tongX int
as
declare @slc int
ifexists(select MaVTu,Namthang from TONKHO where MaVTu=@mvt and Namthang=@nt )
set @slc=@sld+@tongN-@tongX
update TONKHO set SlDau=@sld,TongSLN=@tongN, TongSLX=@tongX, SLCuoi=@slc
FROM TONKHO
where Namthang=@nt and MaVTu=@mvt
print'Update thanh cong!'
end
else
print'Du lieu nhap vao khong co trong co so du lieu'
exec spud_TONKHO_update @nt='2/2001', @mvt='DD01',@sld =34,@tongN=43, @tongX =43
b. Tạo thủ tục spud_TONKHO_Baocaotonkho liệt kê các cột dữ liệu trong bảng tồn kho có thể hiện thêm cột tên vật tư trong bảng VATTU .
--Tạo thủ tục spud_TONKHO_Baocaotonkho liệt kê các cột dữ liệu trong bảng tồn kho
--có thể hiện thêm cột tên vật tư trong bảng VATTU .
createproc spud_TONKHO_Baocaotonkho
as
SELECT TONKHO.MaVTu, VATTU.TenVTu, TONKHO.Namthang, TONKHO.SlDau, TONKHO.TongSLN, TONKHO.TongSLX, TONKHO.SlCuoi
FROM TONKHO leftJOIN
VATTU ON TONKHO.MaVTu = VATTU.MaVTu
exec spud_TONKHO_Baocaotonkho
Bạn đang đọc truyện trên: AzTruyen.Top