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

Tags: