⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shophere.sql_full.sql

📁 NIIT project
💻 SQL
📖 第 1 页 / 共 2 页
字号:

create proc prc_insert_PurchaseOrders
@pid char(4), @sid char(6), @eid char(6), @odate datetime, @sdate datetime, @shid char(6), @fcharge money
as
begin
	if @odate is null
		begin
			insert into dbo.PurchaseOrders (PurchaseOrderID,SupplierID,EmployeeID,ShipDate, ShippingMethodID, FreightCharge)
				values (@pid, @sid, @eid, @sdate, @shid, @fcharge)
		end
	else
		begin
			insert into dbo.PurchaseOrders (PurchaseOrderID,SupplierID,EmployeeID,OrderDate,ShipDate, ShippingMethodID, FreightCharge)
				values (@pid, @sid, @eid, @odate, @sdate, @shid, @fcharge)
		end
end
go


alter table dbo.PurchaseOrders
add constraint df_orderdate default getdate() for OrderDate
go


create trigger trg_check_PurchaseOrders
on PurchaseOrders
for insert, update
as
begin
	declare @fcharge money, @odate datetime, @sdate datetime
	select @fcharge = FreightCharge, @odate = OrderDate, @sdate = ShipDate
	from inserted
	
	if @fcharge <= 0
		begin
			print'Chu y: FreightCharge > 0'
			rollback tran
		end
	else
		begin
			if @odate > getdate() and @odate > @sdate
				begin
					print' OrderDate <= Current date & ShipDate'
					rollback tran
				end
	end
end
go
-----------------------------------------


create table InventoryTransactions
(
	TransactionID char(6) not null,
	TransactionDate datetime,
	ItemID char(6) not null,
	PurchaseOrderID char(4) not null,
	TransactionDescription varchar(30) not null,
	QuantityOrdered int,
	QuantityReceived int,
	TotalAmount money
)
go


alter table dbo.InventoryTransactions
add constraint pk_transactions primary key (TransactionID)
go


create proc prc_genTransactions
@tid char(6) output
as
if not exists(select * from dbo.InventoryTransactions) select @tid='000000'
else
	select @tid=Max(RIGHT(TransactionID,5)) from dbo.InventoryTransactions
	select @tid=
	case
		when @tid >=0 and @tid <9 Then 'T0000'+CONVERT(char,@tid+1)
		when @tid >=9 and @tid <99 Then 'T000'+CONVERT(char,@tid+1)
		when @tid >=99 and @tid <999 Then 'T00'+CONVERT(char,@tid+1)
		when @tid >=999 and @tid <9999 Then 'T0'+CONVERT(char,@tid+1)
		when @tid >=9999 and @tid <=99998 Then 'T'+CONVERT(char,@tid+1)
		
	end
go


create proc prc_insert_Transactions
@tdate datetime, @iid char(6), @pid char(4), @tdes varchar(30), @qordered int, @qreceived int
as
begin
	declare @tid char(6)
	exec dbo.prc_genTransactions @tid output

	if @tdate is null
		begin
			insert into dbo.InventoryTransactions (TransactionID, ItemID, PurchaseOrderID, TransactionDescription, QuantityOrdered, QuantityReceived)
				values (@tid, @iid, @pid, @tdes, @qordered, @qreceived)
		end
	else
		begin
			insert into dbo.InventoryTransactions (TransactionID, TransactionDate, ItemID, PurchaseOrderID, TransactionDescription, QuantityOrdered, QuantityReceived)
				values (@tid, @tdate, @iid, @pid, @tdes, @qordered, @qreceived)
		end
end
go


alter table dbo.InventoryTransactions
add constraint df_transactiondate default getdate() for TransactionDate
go


create trigger trg_check_iTransactions_1
on dbo.InventoryTransactions
for insert, update
as
begin
	declare @qordered int, @qreceived int
	select @qordered = QuantityOrdered, @qreceived = QuantityReceived
	from inserted
	
	if @qordered <= 0 or @qreceived <= 0
		begin
			print'Chu y: QuantityOrdered,QuantityReceived > 0'
			rollback tran
		end
end
go


create trigger trg_check_iTransactions_2
on dbo.InventoryTransactions
for insert, update
as
begin
	declare @qordered int, @qreceived int, @tdate datetime, @odate datetime
	select	@qordered = inserted.QuantityOrdered, @qreceived = inserted.QuantityReceived,
		@tdate = inserted.TransactionDate,
		@odate = OrderDate
	from	inserted join PurchaseOrders	on inserted.PurchaseOrderID = PurchaseOrders.PurchaseOrderID

	if @qreceived > @qordered
		begin
			print'Chu y: QuantityReceived <= QuantityOrdered'
			rollback tran
		end
	else
		begin
			if @tdate > getdate() and @tdate <= @odate
				begin
					print'Chu y: OrderDate of PurchaseOrder < TransactionDate <= Current date'
					rollback tran
				end
		end
end
go

-------------
--TotalAmount = ((QuantityReceived * UnitPrice of Item) + FreightCharge)
create trigger trg_chk_totalamount on dbo.InventoryTransactions
for insert, update
as
begin
	declare @qreceived int, @fcharge money, @price money, @total money, @tid char(6), @iid char(6), @pid char(6)
	select	@qreceived = inserted.QuantityReceived,  @total = inserted.TotalAmount,
		@tid = inserted.TransactionID, @iid = inserted.ItemID, @pid = inserted.PurchaseOrderID,
		@price = UnitPrice, @fcharge = FreightCharge
	from  inserted join Items		on inserted.ItemID = Items.ItemID
			 join PurchaseOrders	on inserted.PurchaseOrderID = PurchaseOrders.PurchaseOrderID
	
	update dbo.InventoryTransactions
	set TotalAmount = ((@fcharge * @price) + @fcharge)
	where TransactionID = @tid
end

go

---------------------------
--ShipDate tu dong cap nhat them 2 ngay, sau khi TransactionDate hoan tat
create trigger trg_update_shipdate on dbo.InventoryTransactions
for update
as
begin
	declare @tdate datetime, @sdate datetime, @pid char(4)
	select 	@tdate = inserted.TransactionDate, @pid = inserted.PurchaseOrderID,
		@sdate = ShipDate
	from inserted join PurchaseOrders	on inserted.PurchaseOrderID = PurchaseOrders.PurchaseOrderID

	update dbo.PurchaseOrders
	set ShipDate = dateadd(dd,2,@sdate)
	where PurchaseOrderID = @pid
end

go

---------------------------
-- QuantityReceived duoc nhap vao, QOH tu dong cap nhat thong tin
create trigger trg_updateQOH on dbo.InventoryTransactions
for update
as
begin
	declare @qreceived int, @qoh int, @iid char(6)
	select 	@qreceived = inserted.QuantityReceived, @iid = inserted.ItemID,
		@qoh = QOH
	from inserted join Items	on inserted.ItemID = Items.ItemID
	
	update dbo.Items
	set QOH = @qoh + @qreceived
	where ItemID = @iid
end

go

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

alter table dbo.Items
add constraint fk_items foreign key (CategoryID) references dbo.Categories

go
alter table dbo.PurchaseOrders
add constraint fk_purchaseorders1 foreign key (SupplierID) references dbo.Suppliers(SupplierID)
go

alter table dbo.PurchaseOrders 
add constraint fk_purchaseorders2 foreign key (EmployeeID) references dbo.Employees

go

alter table dbo.PurchaseOrders 
add constraint fk_purchaseorders3 foreign key (ShippingMethodID) references dbo.ShippingMethods

go

alter table dbo.InventoryTransactions 
add constraint fk_transactions1 foreign key (ItemID) references dbo.Items

go

alter table dbo.InventoryTransactions 
add constraint fk_transactions2 foreign key (PurchaseOrderID) references dbo.PurchaseOrders
go
------------------------------

alter proc prc_delete_SupplierID
@sid char(6)
as
begin
	if not exists (select * from Suppliers where SupplieriD = @sid)
		print'Khong tim thay '+@sid+'tuong ung de xoa'
	else
		begin
			delete InventoryTransactions
			where	TransactionID in (Select TransactionID 
				 		  from InventoryTransactions
		        			  where PurchaseOrderID in (Select PurchaseOrderID
									    from PurchaseOrders
									    where SupplierID = @sid))
			print'Da xoa du lieu trong bang InventoryTransactions'
			--------------------------------------------------------
			delete PurchaseOrders
			where SupplierID = @sid
			print'Da xoa du lieu trong bang PurchaseOrders'
			--------------------------------------------------------
			delete Suppliers
			where SupplierID = @sid
			print'Da xoa thanh cong '+@sid+'trong bang Suppliers'
		end 
end
go

--exec prc_delete_SupplierID 'U00001'
----------------------------
-------------- cau 7 ---------------------------------------------
--cau a
select *
from dbo.PurchaseOrders
where convert (char(10),month(getdate())) = convert(char(10), month(OrderDate))

--cau b
select *
from dbo.PurchaseOrders a join dbo.Employees b
on a.EmployeeID = b.EmployeeID

---cau c
select *
from dbo.PurchaseOrders
where convert(char(10),year(getdate()))-2 = convert(char(10),year(ShipDate))

---cau d
select *
from dbo.Employees

---chi muc
go
create nonclustered index idx_PurchaseOrders1
on dbo.PurchaseOrders (OrderDate)

go
create nonclustered index idx_PurchaseOrders2
on dbo.PurchaseOrders (EmployeeID)

go
create nonclustered index idx_PurchaseOrders3
on dbo.PurchaseOrders (ShipDate)

go
create nonclustered index idx_Employees
on dbo.Employees (Title)


sp_helpindex PurchaseOrders
sp_helpindex Employees
---------------------------------------------------

exec dbo.prc_insert_Cats 'hang de vo'
exec dbo.prc_insert_Cats 'hang chat luong'

exec dbo.prc_insert_Emps 'vo', 'thong', 'Senior Excutive', '2314-123-232'
exec dbo.prc_insert_Emps 'ho', 'vi', 'Trainee', '4567-456-444'

exec dbo.prc_insert_Items 'ly su', 'ly su dung uong nuoc', 'C00001', 2, 3, 2
exec dbo.prc_insert_Items 'keo cao su', 'cao su nguy阯 chat', 'C00002', 4, 1, 5

exec dbo.prc_insert_ShippingMethods 'duong bo'
exec dbo.prc_insert_ShippingMethods 'duong chim bay'

exec dbo.prc_insert_Suppliers 'cao', 'cao', '123qwe', 'hcm', '084', 'q11', 'trung quoc', '4321-332-321'
exec dbo.prc_insert_Suppliers 'lun', 'lun', '890asd', 'hcm', '123', 'q11', 'viet name', '9874-456-987'

exec dbo.prc_insert_PurchaseOrders 'P001', 'U00001', 'E00002',null , '2009-03-25', 'S00002', 2
exec dbo.prc_insert_PurchaseOrders 'p002', 'U00002', 'E00002','2009-03-1' , '2009-03-25', 'S00002', 3



exec dbo.prc_insert_Transactions '2009-03-01', 'I00002', 'p002', 'xong xuoi het roi', 5, 2
exec dbo.prc_insert_Transactions null, 'I00001', 'p001', 'xong xuoi het roi', 4, 2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -