Chào các bạn! Vì nhiều lý do từ nay Truyen2U chính thức đổi tên là Truyen247.Pro. Mong các bạn tiếp tục ủng hộ truy cập tên miền mới này nhé! Mãi yêu... ♥

SQL LapTrinh

--39. Giam 25% luong cua nhung nhan vien trong nam 2008 khong lap bat ky hoa don nao

Update NhanVien

Set PhuCap=0.25*phucap

Where manhanvien = any (

Select manhanvien

From nhanvien

Where not exists (

Select *

From dondathang

Where dondathang.manhanvien=nhanvien.manhanvien) )

--2.Thong ke tong so luong ban hang cua mot ma hang

Create Proc sp_2

As

Begin

Select mahang as 'Ma Hang', sum(soluong) as 'So Luong'

From chitietdathang, dondathang

Where chitietdathang.sohoadon=dondathang.sohoadon

Group By mahang

End;

Drop Proc sp_2

Execute sp_2

--3.

Create Function Fun_3

Return nvarchar(5)

Begin

Select mahang from mahang

End;

Select * from chitietdathang

where soluong in(200,400,500)

Select * from nhanvien

where manhanvien in ('NV001','NV003','NV002','NV000')

select manhanvien

From dondathang join chitietdathang on dondathang.sohoadon = chitietdathang.sohoadon

group by manhanvien

having sum(soluong) = any (

select sum(soluong)

From dondathang join chitietdathang on dondathang.sohoadon = chitietdathang.sohoadon

group by manhanvien )

Select sum(soluong)

From mahang

where mahang='MH001'

Create Function Fun_sl(@date datetime)

returns int

as

begin

Declare @getdate int

Set @getdate = year(@date)

return @getdate

end

Drop Function Fun_sl

Select * From Fun_sl '2/8/1989'

--Su dung ham noi tuyen inline

Create Function Fun_inline()

returns table

as

return (Select mahang, count(maloaihang),sum(soluong) from mahang

Group By mahang)

Drop Function Fun_inline

Select * from Fun_inline()

(chú ý: CSDL QuanLyBanHang có bảng MatHang, ở CSDL khi các em tạo ra, ghi chệch thành MaHang, nên em sửa lại tên bảng trong đoạn code dưới khi chạy thử ở CSDL của mình)

-- Bài 4: Viết trigger cho bảng chitietdathang

-- a. Khi có 1 bản ghi mới được bổ sung vào bảng này thì giảm số lượng hàng hiện có

-- nếu số lượng hàng hiện có lớn hơn hoặc bằng số lượng hàng được bán ra.

-- Ngược lại thì hủy bỏ thao tác bổ sung

Create trigger trg_chitietdathang_insert

on chitietdathang

for insert

as

begin

-- khai báo các biến sử dụng trong trigger

declare @mahang nvarchar (10) -- biến chứa mã hàng được cập nhật

declare @sl_con int -- biến chứa số lượng hàng còn

declare @sl_ban int -- biến chứa số lượng hàng bán ra

-- Lấy mã hàng, số lượng bán ra từ bảng inserted và gán vào các biến tương ứng

Select @mahang = mahang, @sl_ban = soluong from inserted

-- Lấy số lượng hàng con từ bảng mathang và gán vào các biến tương ứng

select @sl_con = soluong from mathang where mahang=@mahang

-- so sánh và cập nhật nếu thỏa mãn điều kiện

if @sl_con >= @sl_ban

update mathang set soluong = soluong - @sl_ban where mahang = @mahang

else

rollback transaction

end

-- thêm vào bảng chitietdathang để test trigger

insert into chitietdathang values (1,'MH001',120000,30,0)

drop trigger trg_chitietdathang_insert_cursor

-----------------------------------------------------------------------------------------

-- b. Khi cập nhật lại số lượng hàng được bán, kiểm tra số lượng hàng được cập nhật lại

--có phù hợp hay không (số lượng hàng bán ra không được vượt quá số lượng hàng hiện có

--và không được nhỏ hơn 1). Nếu dữ liệu hợp lệ thì giảm (hoặc tăng) số lượng hàng hiện có

--trong công ty, ngược lại thì bỏ thao tác cập nhật

create trigger trg_chitietdathang_update_soluong

on chitietdathang

for update

as

if update(soluong)

begin

if exists (select sohoadon from inserted where soluong <1)

rollback transaction

else

begin

update mathang

-- chú ý: vì đây là trường hợp số lượng bản ghi cập nhật >1, nên cần tính tổng số lượng của các bản ghi được cập nhật

set soluong = soluong - (select sum(inserted.soluong - deleted.soluong)

from inserted inner join deleted on inserted.sohoadon = deleted.sohoadon

and inserted.mahang = deleted.mahang

where inserted.mahang = mathang.mahang

group by inserted.mahang)

where mahang in (select distinct mahang from inserted)

if exists (select mahang from mathang where soluong < 1)

rollback transaction

end

end

drop trigger trg_chitietdathang_update_soluong

--------------------------

Create Trigger trg_chitietdathang_giaban

On Chitietdathang

For Insert, update

As

if update (giaban)

if ( Exists (Select inserted.mahang From Inserted, Mathang

where Inserted.MaHang=MatHang.MaHang

and Mathang.giahang > inserted.giaban) )

Begin

Print'Ko hop le' RollBack Transaction end

(chú ý: CSDL QuanLyBanHang có bảng MatHang, ở CSDL khi các em tạo ra, ghi chệch thành MaHang, nên em sửa lại tên bảng trong đoạn code dưới khi chạy thử ở CSDL của mình)

-- Bài 4: Viết trigger cho bảng chitietdathang

-- a. Khi có 1 bản ghi mới được bổ sung vào bảng này thì giảm số lượng hàng hiện có

-- nếu số lượng hàng hiện có lớn hơn hoặc bằng số lượng hàng được bán ra.

-- Ngược lại thì hủy bỏ thao tác bổ sung

Create trigger trg_chitietdathang_insert

on chitietdathang

for insert

as

begin

-- khai báo các biến sử dụng trong trigger

declare @mahang nvarchar (10) -- biến chứa mã hàng được cập nhật

declare @sl_con int -- biến chứa số lượng hàng còn

declare @sl_ban int -- biến chứa số lượng hàng bán ra

-- Lấy mã hàng, số lượng bán ra từ bảng inserted và gán vào các biến tương ứng

Select @mahang = mahang, @sl_ban = soluong from inserted

-- Lấy số lượng hàng con từ bảng mathang và gán vào các biến tương ứng

select @sl_con = soluong from mathang where mahang=@mahang

-- so sánh và cập nhật nếu thỏa mãn điều kiện

if @sl_con >= @sl_ban

update mathang set soluong = soluong - @sl_ban where mahang = @mahang

else

rollback transaction

end

-- thêm vào bảng chitietdathang để test trigger

insert into chitietdathang values (1,'MH001',120000,30,0)

drop trigger trg_chitietdathang_insert_cursor

-----------------------------------------------------------------------------------------

-- b. Khi cập nhật lại số lượng hàng được bán, kiểm tra số lượng hàng được cập nhật lại

--có phù hợp hay không (số lượng hàng bán ra không được vượt quá số lượng hàng hiện có

--và không được nhỏ hơn 1). Nếu dữ liệu hợp lệ thì giảm (hoặc tăng) số lượng hàng hiện có

--trong công ty, ngược lại thì bỏ thao tác cập nhật

create trigger trg_chitietdathang_update_soluong

on chitietdathang

for update

as

if update(soluong)

begin

if exists (select sohoadon from inserted where soluong <1)

rollback transaction

else

begin

update mathang

-- chú ý: vì đây là trường hợp số lượng bản ghi cập nhật >1, nên cần tính tổng số lượng của các bản ghi được cập nhật

set soluong = soluong - (select sum(inserted.soluong - deleted.soluong)

from inserted inner join deleted on inserted.sohoadon = deleted.sohoadon

and inserted.mahang = deleted.mahang

where inserted.mahang = mathang.mahang

group by inserted.mahang)

where mahang in (select distinct mahang from inserted)

if exists (select mahang from mathang where soluong < 1)

rollback transaction

end

end

drop trigger trg_chitietdathang_update_soluong

--------------------------

Create Trigger trg_chitietdathang_giaban

On Chitietdathang

For Insert, update

As

if update (giaban)

if ( Exists (Select inserted.mahang From Inserted, Mathang

where Inserted.MaHang=MatHang.MaHang

and Mathang.giahang > inserted.giaban) )

Begin

Print'Ko hop le'

RollBack Transaction

End

Bạn đang đọc truyện trên: Truyen247.Pro

Tags: