-- triggers
--this is a very simple trigger
--it activates on inserts and updates to the
--person table, but does nothing but
--print out a statemet
Create trigger tr_doNothingTrigger
on Person
after Insert, Update
As
Print 'there was an insert'
--test it
Insert into Person(lastName, Firstname)
Values('Brown', 'John')
Update Person
Set LastName='Browning'
Where Firstname='John'
and Lastname='Brown'
go
--this trigger prevents any deletion
--from the Donation table
--instead of triggers intercept the action
--and do what is in the body of the trigger
--instead of the command
Create trigger tr_DonationDelete
on Donation
instead of Delete
As
Print 'You are not allowed to Delete'
Delete from Donation where DonationKey=3
--to remove this trigger
Drop trigger tr_donationDelete
--just to see who has high total grant amounts
Select personkey, sum(GrantAmount)
From ServiceGrant
Group by Personkey
--business rule will be that the maximum lifetime grant is 2000
-- on an insert into the ServiceGrant
--if their total grants are greater than 2000,
--then write their grant into a temp table, showing their total grants and
--how much is still available if any
--if their total is less than 2000 with the new grant then just insert it
go
--**************************************************
Create trigger tr_LifeTimeGrant
on ServiceGrant
instead of Insert --will intercept insertions
As
--delaring variables
Declare @PersonKey int
Declare @TotalGrant money
Declare @Grant money
Declare @maxGrant money
Declare @RemainingGrant money
--settin values
set @maxGrant=2000
--these values come from the temporary table
--inserted that exists for as long as the insert
--transaction is open (a millisecond or less)
--but you can access it in a trigger
Select @Personkey=personkey, @Grant=GrantAmount
from Inserted
--get the totals from the GrantService Table
Select @TotalGrant=Sum(GrantAmount)
From ServiceGrant
Where personKey=@Personkey
--check to see if the total plus the current grant
--are greater than the allowed maximum grant
if (@TotalGrant + @Grant >= @maxGrant)
Begin
--if it is make sure the tempGrant table
--exists. If not make it
if not exists
(Select name
from sys.Tables
where name = 'TempGrant')
Begin
Create table TempGrant
(
PersonKey int,
GrantAmount money,
TotalGrant money,
AvailableGrant money
)
End
--table made set the remaining grant amount
Set @RemainingGrant=@maxGrant-@TotalGrant
--insert into the tempGrant table
Insert into TempGrant
values(@PersonKey, @Grant, @TotalGrant, @RemainingGrant)
End --end the of
Else --begin the else
Begin
--if it is not larger than the maximum alloted value
--just insert it into the service grant table
Insert into ServiceGrant(
GrantAmount, GrantDate, PersonKey, ServiceKey, EmployeeKey)
Select GrantAmount, GrantDate, PersonKey, ServiceKey, EmployeeKey
From Inserted
End
--****************************************
--test the trigger
Insert into ServiceGrant(GrantAmount, GrantDate, PersonKey, ServiceKey, EmployeeKey)
Values(950,getDate(),16,3,1)
Select * from TempGrant
Drop table TempGrant
Wednesday, May 15, 2013
Triggers
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment