Click here to Skip to main content
15,891,597 members
Please Sign up or sign in to vote.
2.60/5 (2 votes)
I have a table whose name is Sales.details and i created it as follows
SQL
create table sales.details
salesid int identity(1,1) primary key
shopid int foreign key references shop.name(shopid)
itemid int foreign key references item.item(itemid)
dateofpurchase date

now as soon as i insert a record into this table i want the quantity present in one more table called as shop.stock to be reduced by 1. Hence i created an on insert trigger for the sales.details table as
SQL
create trigger [sales].[trigoninsert] on [sales].[details]
for insert
as
declare @itemid int;
declare @shopid int;
update shop.stock
set stock_remaining=stock_remaining-1 where itemid=@itemid and shopid=@shopid

But when i insert a record to my sales.details table i dont find stock remaining reduced by 1. Stock remaining stays the same

Can someone please correct me?
Posted
Comments
How do you insert record to tabla sales.details?

The trigger should be written in the following way assuming you are inserting only one record at a time in sales.details table-

SQL
create trigger [sales].[trigoninsert] on [sales].[details]
for insert
as
declare @itemid int;
declare @shopid int;

select @itemid=itemid from inserted
select @shopid=shopid from inserted

update shop.stock
set stock_remaining=stock_remaining-1 where itemid=@itemid and shopid=@shopid



"itemid" & "shopid" field name should be replaced with actual field name in sales.details table

If you want to handle multiple record updates(as well as single record update) then the trigger should be created in the following way -

SQL
create trigger [sales].[trigoninsert] on [sales].[details]
for insert
as
--declare @itemid int;
--declare @shopid int;

--select @itemid=itemid from inserted
--select @shopid=shopid from inserted

update shop.stock
set stock_remaining=stock_remaining-1
from shop.stock inner join inserted on itemid=inserted.itemid and shopid=inserted.shopid
 
Share this answer
 
Comments
Rakshith Kumar 4-Oct-13 4:39am    
Thank you madhu. It is working perfectly. I forgot those 2 things :(
H, i Please find the query for the required logic
SQL
drop table shopname

Create Table shopname (shopid int identity(1,1) primary key,ShopName varchar(150))
Insert shopname values ('Poorvika')
Insert shopname values ('Univercell')

Create Table item (itemid int identity(1,1) primary key,itemName varchar(150))
Insert item values ('Mobile')
Insert item values ('Mp3Player')

Create Table Stock ( stockid int identity(1,1) primary key, shopid int foreign key references shopname(shopid),
itemid int foreign key references item(itemid), Stockremaining int)


Insert Stock values(1,1,10)
Insert Stock values(1,2,8)
Insert Stock values(2,1,3)
Insert Stock values(2,2,3)


create table salesdetails
(
salesid int identity(1,1) primary key,
shopid int foreign key references shopname(shopid),
itemid int foreign key references item(itemid),
dateofpurchase date)

--Trigger usage 
CREATE TRIGGER salestrigoninsert on salesdetails
      AFTER INSERT
AS 
BEGIN
	Declare @shopid int
	Declare @itemid int
	
	Select  @shopid  = shopid, @itemid=i.itemid from inserted i;	 -- getting the value from Insert Statement
	
	Update stock set Stockremaining = Stockremaining-1 where Shopid =@shopid and itemid = @itemid
	
END

Insert salesdetails values (1,1,'2013-10-04')
Select * from shopname
Select * from item
Select * from stock
Select * from salesdetails


Note: Table names are not exactly the same

Regards,Mahe...
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900