--stored procedures
--parameterized view
use Community_Assist
go
Create proc usp_HRViewProc
@EmployeeKey int
As
Select PersonLastName,
PersonfirstName,
PersonEmail,
EmployeeHireDate,
EmployeeAnnualSalary
From Person p
inner Join Employee e
on p.PersonKey=e.PersonKey
Where EmployeeKey = @EmployeeKey
exec usp_HRViewProc @EmployeeKey=2
Go
--Create hash password function
Alter function fx_hashPassword2
(@seed int, @password nvarchar(50))
returns varbinary(500)
As
Begin
Declare @newPassword nvarchar(70)
set @newPassword =
cast(@seed as nvarchar(20)) + @Password
Declare @hashed varbinary(500)
set @hashed = hashbytes('sha2_512', @newPassword)
return @hashed
End
Select * from businessrule
go
--new person stored procedure
Alter proc usp_NewPerson
@lastName nvarchar(255),
@FirstName nvarchar(255)=null,
@Email nvarchar(255),
@password nvarchar(50),
@AptNumber nvarchar(255)=null,
@Street nvarchar(255),
@City nvarchar(255)='Seattle',
@State nvarchar(255)='WA',
@Zip nvarchar(255),
@HomePhone nvarchar(255)
As
--test to see if person exists
if exists
(Select PersonLastName, PersonEmail From Person
Where PersonLastName=@LastName
And PersonEmail=@Email)
Begin--begin if
Print 'Already registered'
return
End--end if
--create the password hash
Declare @seed int
Set @seed = dbo.fx_GetSeed()
declare @hashedPass varbinary(500)
set @hashedPass = dbo.fx_HashPassword(@seed,@password)
Begin tran --start a transaction
Begin try -- begin try
--insert into person
Insert into Person(
PersonLastName, PersonFirstName,
PersonEmail, PersonPassWord,
PersonEntryDate, PersonPassWordSeed)
Values(@LastName, @FirstName,
@Email, @hashedPass,GetDate(),@seed)
--get the key of the person just inserted
Declare @key int = ident_current('Person')
--insert into PersonAddress
Insert into PersonAddress(
PersonAddressApt,
PersonAddressStreet,
PersonAddressCity, PersonAddressState,
PersonAddressZip, PersonKey)
Values( @AptNumber,@street,@city,@state,@Zip,@key)
Insert into Contact([ContactNumber],
[ContactTypeKey], [PersonKey])
Values (@HomePhone, 1, @Key)
Commit Tran --commit the transaction if no error
End Try
Begin Catch
Rollback Tran
Print Error_Message()
End Catch
exec usp_NewPerson
@lastName = 'Conger',
@FirstName='Steve',
@Email='spconger@gmail.com',
@password='congerPass',
@Street='101 nowhere bld',
@Zip='98122',
@HomePhone='2065551201'
Select * from PersonAddress
Select * from Contact
Select * from Person
go
--stored procedure update Address
Create proc usp_UpdateAddress
@PersonAddressApt nvarchar(255) = null,
@PersonAddressStreet nvarchar(255),
@PersonAddressCity nvarchar(255)= 'Seattle',
@PersonAddressState nvarchar(255)='Wa',
@PersonAddressZip nvarchar(255),
@PersonKey int
As
Begin tran
Begin Try
Update PersonAddress
Set PersonAddressApt=@PersonAddressApt,
PersonAddressStreet=@PersonAddressStreet,
PersonAddressCity =@PersonAddressCity,
PersonAddressState=@PersonAddressState,
PersonAddressZip=@PersonAddressZip
Where PersonKey = @PersonKey
Commit Tran
End try
Begin Catch
Rollback tran
print error_message()
End catch
Select * from PersonAddress
Exec usp_UpdateAddress
@PersonAddressApt = '304',
@PersonAddressStreet='100 South Mann Street',
@PersonAddressZip='98001',
@PersonKey=1;
--trigger
--like a stored proc but triggered by an event
--insert update delete
--triggers have no parameters
-- for an event, instead of an event
Create Trigger Tr_PersonDelete on Person
instead of Delete
As
if not exists
(Select name from sys.Tables
where name='PersonDelete')
Begin
CREATE TABLE [dbo].[PersonDelete](
[PersonKey] int NOT NULL,
[PersonLastName] nvarchar(255) NOT NULL,
[PersonFirstName] nvarchar(255) NULL,
[PersonEmail] nvarchar(255) NULL,
[PersonPassWord] varbinary(500) NULL,
[PersonEntryDate] datetime NOT NULL,
[PersonPassWordSeed] int NULL
)
End
Insert into PersonDelete (PersonKey,PersonLastName,
PersonFirstName,PersonEmail,PersonPassWord,
PersonEntryDate, PersonPassWordSeed)
Select PersonKey,PersonLastName,
PersonFirstName,PersonEmail,PersonPassWord,
PersonEntryDate, PersonPassWordSeed
From Deleted --temp table in temp database that stores
--deletions and updates
Select * from Person
Insert into Person (PersonLastName, PersonFirstName,
PersonEmail, PersonEntryDate)
Values('NotHereLong','Deleted','Deleted@gmail.com', GetDate())
Delete from Person where Personkey=132
Select * from PersonDelete
--check to see if request is large than max request
Create trigger tr_CheckMax on GrantRequest
for Insert
as
if not exists
(Select name from sys.Tables
Where name ='OverMax')
Begin
Create Table OverMax
(
RequestDate date,
PersonKey int,
GrantypeKey int,
Explanation nvarchar(255) null,
RequestAmount money
)
End
Declare @GrantMax money
Declare @GrantType int
Declare @RequestAmount money
Select @GrantType=GrantTypeKey from inserted
Select @GrantMax = GrantTypeMaximum from GrantType
Where GranttypeKey=@GrantType
Select @RequestAmount = GrantRequestAmount from inserted
if @RequestAmount > @GrantMax
Begin
Insert into OverMax(RequestDate, PersonKey, GranTypeKey,Explanation, RequestAmount)
Select GrantRequestDate, PersonKey, GrantTypeKey, GrantRequestExplanation, GrantRequestAmount
From inserted
End
Select * from GrantType
insert into GrantRequest(
GrantRequestDate, PersonKey, GrantTypeKey,
GrantRequestExplanation, GrantRequestAmount)
Values (GetDate(),1,1,'Always hungry',300.00)
Select * from GrantRequest
Select * from OverMax
Wednesday, June 1, 2016
Triggers
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment