Create Schema ManagerSchema Go Create proc ManagerSchema.usp_UpdateEmployee @EmployeeKey int, @EmployeeLastName nvarchar(255), @EmployeeFirstName nvarchar(255), @EmployeeAddress nvarchar(255), @EmployeeCity nvarchar(255), @EmployeeZipCode nchar(5), @EmployeePhone nchar(10), @EmployeeEmail nvarchar(255), @PositionName nvarchar(255), @EmployeeHourlyPayRate decimal(5,2), @OrignalDatePositionAssigned Date, @EmployeePositionDateAssigned date As Declare @PositionKey int Select @Positionkey = PositionKey from Position Where PositionName = @PositionName if @positionKey is null Begin print 'Invalid position' return -1 End Begin tran Begin try Update Employee Set [EmployeeLastName] = @EmployeeLastName, [EmployeeFirstName] = @EmployeeFirstName, [EmployeeAddress]=@EmployeeAddress, [EmployeeCity]=@EmployeeCity, [EmployeeZipCode]=@EmployeeZipCode, [EmployeePhone]=@EmployeePhone, [EmployeeEmail]=@EmployeeEmail Where EmployeeKey = @EmployeeKey Update EmployeePosition Set [PositionKey]=@PositionKey, [EmployeeHourlyPayRate]=@EmployeeHourlyPayRate, [EmployeePositionDateAssigned]=@EmployeePositionDateAssigned Where EmployeeKey = @EmployeeKey and EmployeePositionDateAssigned = @OrignalDatePositionAssigned Commit Tran End try Begin Catch Rollback tran Print error_Message() return -2 End Catch Select * from Employee exec ManagerSchema.usp_UpdateEmployee @EmployeeKey = 1, @EmployeeLastName ='Summers', @EmployeeFirstName='Susanne', @EmployeeAddress='28 Elm Ave.', @EmployeeCity='Seattle', @EmployeeZipCode='98100', @EmployeePhone='2065554312', @EmployeeEmail='Elizabeth.Adams16@metroalt.com', @PositionName='Lawyer', @EmployeeHourlyPayRate=100.00, @OrignalDatePositionAssigned='4/14/1998', @EmployeePositionDateAssigned='7/28/2016' Select * from EmployeePosition create Unique index ix_UniqueEmail on Employee (EmployeeEmail) --add a driver to a route for a day go Create proc managerSchema.usp_AssignShift @BusDriverShiftKey int, @EmployeeKey int, @BusRouteKey int, @BusScheduleAssignmentDate date, @BusKey int As Begin tran Begin try Insert into BusScheduleAssignment ( BusDriverShiftKey, EmployeeKey, BusRouteKey, BusScheduleAssignmentDate, BusKey) Values( @BusDriverShiftKey, @EmployeeKey, @BusRouteKey, @BusScheduleAssignmentDate, @BusKey) Commit Tran End Try Begin Catch Rollback tran print Error_Message() return -1 End Catch Exec [ManagerSchema].[usp_AssignShift] @BusDriverShiftKey=2, @EmployeeKey=6, @BusRouteKey=127, @BusScheduleAssignmentDate='7/29/2016', @BusKey=43 Select * from [dbo].[BusScheduleAssignment] Select * from Busroute Select * from EmployeePosition where EmployeeKey=6 go Create Proc managerSchema.usp_TotalHoursDateRange @EmployeeKey int, @startDate Date, @EndDate Date AS Select EmployeeKey, sum(dateDiff(hour,[BusDriverShiftStartTime],[BusDriverShiftStopTime])) [Total Hours] From BusDriverShift bs Inner join BusScheduleAssignment bsa on bs.BusDriverShiftKey=bsa.BusDriverShiftKey Where EmployeeKey=@EmployeeKey And [BusScheduleAssignmentDate] between @startDate and @EndDate Group by EmployeeKey go exec [ManagerSchema].[usp_TotalHoursDateRange] @EmployeeKey= 6, @startDate ='6/1/2014', @EndDate='6/8/2014'
Thursday, July 28, 2016
Security Procedures
Thursday, July 21, 2016
Security code
--logins are stored in master Use master --create sql server login Create login GrantApplicantLogin with password='P@ssw0rd1', default_database=Community_Assist --use community_assist Use Community_Assist go --crate schema Create Schema ApplicantSchema Go --create user Create user GrantApplicant for login GrantApplicantLogin with default_schema= ApplicantSchema Go --create role Create role ApplicantRole Go --assign permissions on objects to role Grant Select, exec on schema::ApplicantSchema to ApplicantRole --add the user to the role alter Role Applicantrole add member GrantApplicant go --Create procedure as part of procedure create proc ApplicantSchema.usp_GrantHistory @personKey int As Select GrantRequestDate, GrantTypeName, GrantRequestExplanation, GrantRequestAmount From GrantRequest inner join GrantType on GrantRequest.GrantTypeKey=GrantType.GrantTypeKey where personkey = @personkey go --this is a view for the human resources schema --we build this using the graphical tools Create view HumanResourcesSchema.vw_Employee as Select PersonLastName, PersonFirstName, PersonEmail, EmployeeHireDate, EmployeeannualSalary From Person p inner join Employee e on p.personkey=e.personKey go
Tuesday, July 12, 2016
Views for Reports
--List of Donors --Amount allocated to each grant type --total donations by year and month --Total grants by year and month (count, total alloctated) --Average request per grant type --total requests vs total allocated (by year month--also by type) use Community_Assist Go Create view vw_DonorContact As Select PersonLastName LastName, PersonFirstName FirstName, PersonEmail Email From person Where Personkey in (Select PersonKey from Donation) Go Alter view vw_DonorContactb As Select Distinct PersonLastName LastName, PersonFirstName FirstName, PersonEmail Email From person inner join Donation on person.PersonKey = Donation.PersonKey go Select * from vw_DonorContactb order by LastName Select * from Donation go Create view vw_TotalDonationsByYearMonth as Select Year(DonationDate) [Year], DateName(month, DonationDate) [MonthName], format(sum(DonationAmount),'$ #,###.00') Total From Donation Group by Year(donationdate), DateName(month, DonationDate) go Select * from vw_TotalDonationsByYearMonth order by Year go Create view vw_TotalGrantsByYearMonth As Select Year(GrantReviewDate) [Year], DateName(month, GrantReviewDate) [Month], Sum(GrantAllocationamount) Total From GrantReview Group by Year(GrantReviewDate), Datename(Month,GrantReviewDate) go Create view vw_TotalAllocatedByGrantType As Select GrantTypeName, sum(GrantAllocationAmount) Total From GrantType gt inner join GrantRequest gr on gt.GrantTypeKey=gr.GrantTypeKey inner join GrantReview grw on gr.GrantRequestKey=grw.GrantRequestKey Group by GrantTypeName go Create view vw_CountByGrantType As Select GrantTypeName, Count(*) [Count] From GrantType gt inner join GrantRequest gr on gt.GrantTypeKey=gr.GrantTypeKey inner join GrantReview grw on gr.GrantRequestKey=grw.GrantRequestKey Group by GrantTypeName go Create view vw_RequestvsAllocationByGrantType AS Select GrantTypeName, Sum(GrantRequestAmount) RequestAmount, Sum(GrantAllocationAmount) AllocatedAmount, Sum(GrantRequestAmount)-Sum(GrantAllocationAmount) [Difference] From GrantType gt inner join GrantRequest gr on gt.GrantTypeKey=gr.GrantTypeKey inner join GrantReview grw on gr.GrantRequestKey=grw.GrantRequestKey Group by GrantTypeName go Create proc usp_RequestvsAllocationByGrantType @GrantTypeName nvarchar(255) As Select GrantTypeName, Sum(GrantRequestAmount) RequestAmount, Sum(GrantAllocationAmount) AllocatedAmount, Sum(GrantRequestAmount)-Sum(GrantAllocationAmount) [Difference] From GrantType gt inner join GrantRequest gr on gt.GrantTypeKey=gr.GrantTypeKey inner join GrantReview grw on gr.GrantRequestKey=grw.GrantRequestKey where GrantTypeName=@GrantTypeName Group by GrantTypeName exec usp_RequestvsAllocationByGrantType 'Child Care'
Thursday, July 7, 2016
Snapshot
Create database Community_AssistSnapshot on (name='Community_Assist', filename= 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\Community_Assist.ds') as Snapshot of Community_Assist Use Community_AssistSnapshot Select * from Person Use Community_Assist Update Person Set PersonFirstName = 'jason' Where Personkey=1 Select * From Person
Backup Restore
--full backup of the database
Backup database Community_Assist
To disk= 'C:\Backups\Community_Assist.Bak'
with init
--create table after full backup and insert a record
Create table Test2
(
TestKey int identity(1,1) primary key,
TestDate DateTime default GetDate(),
TestDescription nvarchar(255)
)
Insert into Test2 (TestDescription)
values('Table added after full backup.')
--then we do the differential backup
Backup Database Community_Assist
To Disk='C:\Backups\Community_Assist.Bak'
with differential
Insert into Test2 (TestDescription)
values('This record added after differential')
--now backup the log
use Master
Backup log Community_Assist
to disk ='C:\Backups\Community_Assistlog.Bak'
with norecovery, no_truncate
-- restore full backup (file 1)
Restore Database Community_Assist
From disk='C:\Backups\Community_Assist.Bak'
with norecovery, file=1
--Resore Differential backup (file 2)
Restore Database Community_Assist
From disk='C:\Backups\Community_Assist.Bak'
with norecovery, file=2
--restore the log
Restore Log Community_Assist
From disk='C:\Backups\Community_Assistlog.Bak'
with recovery
use Community_Assist
Select * from Test2
/*
Syntax for restoring to a moment in time
RESTORE LOG AdventureWorks
FROM AdventureWorksBackups
WITH FILE=5, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';
RESTORE DATABASE AdventureWorks WITH RECOVERY;
*/
Sunday, July 3, 2016
Table Partitioning
/*PARTITIONING EXAMPLE
I am going to use the Employee table in metroalt for this partition
though I am not going to make the partitions in MetroAlt itself,
Rather I will make a new database and a new table and copy the data
from metroAlt into that database.
For the partitions we will use 1995-1999, 2000-2004, 2004-2009, 2010 forward
Our database will need to have five file groups.
Here's the pattern:
Create database PartitionTest
go
Alter database PartitionTest
Add FileGroup Sales2005;
Go
Alter Database PartitionTest
Add file
(
name ='Sales2005',
FileName='C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\SALES2005File.ndf',
Size=5MB,
MaxSize=200MB,
FileGrowth=5mb
)
To filegroup Sales 2005
*/
if exists
(Select name from sys.Databases
where name = 'EmployeePartition')
Begin
Drop Database EmployeePartition
end
Go
-- create the database.
Create database EmployeePartition
go
--add the first file group and file
alter database EmployeePartition
Add Filegroup Employees1995Group
Go
Alter database EmployeePartition
Add File
(name='Employees1995',
Filename='C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\Employees1995File.mdf',
size=5mb,
MaxSize=200mb,
FileGrowth=5mb
)
to Filegroup Employees1995Group
go
alter database EmployeePartition
Add Filegroup Employees2000Group
Go
Alter database EmployeePartition
Add File
(name='Employees2000',
Filename='C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\Employees2000File.mdf',
size=5mb,
MaxSize=200mb,
FileGrowth=5mb
)
to filegroup Employees2000Group
go
alter database EmployeePartition
Add Filegroup Employees2005Group
Go
Alter database EmployeePartition
Add File
(name='Employees2005',
Filename='C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\Employees2005File.mdf',
size=5mb,
MaxSize=200mb,
FileGrowth=5mb
)
To Filegroup Employees2005group
go
alter database EmployeePartition
Add Filegroup Employees2010Group
Go
Alter database EmployeePartition
Add File
(name='Employees2010',
Filename='C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\Employees2010File.mdf',
size=5mb,
MaxSize=200mb,
FileGrowth=5mb
)
to filegroup Employees2010Group
go
alter database EmployeePartition
Add Filegroup Employees2015Group
Go
Alter database EmployeePartition
Add File
(name='Employees2015',
Filename='C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\Employees2015File.mdf',
size=5mb,
MaxSize=200mb,
FileGrowth=5mb
)
To filegroup Employees2015Group
/*Next we want to create the partion function and
the partition scheme.
*/
Use EmployeePartition
Create Partition Function Fx_Hiredate (date)
As range left
For values('19941231', '19991231','20041231','20091231')
Go
--create the partition schema
Create Partition scheme sch_HireDate
As Partition fx_HireDate
to (Employees1995Group, Employees2000Group, Employees2005Group, Employees2010Group, Employees2015Group)
--now create the table that uses the partition schema
CREATE TABLE [dbo].[Employee](
[EmployeeKey] [int],
[EmployeeLastName] [nvarchar](255),
[EmployeeFirstName] [nvarchar](255),
[EmployeeAddress] [nvarchar](255),
[EmployeeCity] [nvarchar](255),
[EmployeeZipCode] [nchar](5),
[EmployeePhone] [nchar](10),
[EmployeeEmail] [nvarchar](255),
[EmployeeHireDate] [date]
) on sch_HireDate(EmployeeHireDate)
--insert into the table
Insert into Employee(EmployeeKey,
EmployeeLastName,
EmployeeFirstName,
EmployeeAddress,
EmployeeCity,
EmployeeZipCode,
EmployeePhone,
EmployeeEmail,
EmployeeHireDate)
Select EmployeeKey,
EmployeeLastName,
EmployeeFirstName,
EmployeeAddress,
EmployeeCity,
EmployeeZipCode,
EmployeePhone,
EmployeeEmail,
EmployeeHireDate
From MetroAlt.Dbo.Employee
Select * from Employee
--1995-1999
Select * from Employee
where $partition.FX_HireDate(EmployeeHireDate)=2
--2000-2004
Select * from Employee
where $partition.FX_HireDate(EmployeeHireDate)=3
--2005-2009
Select * from Employee
where $partition.FX_HireDate(EmployeeHireDate)=4
--2010-2014
Select * from Employee
where $partition.FX_HireDate(EmployeeHireDate)=5
Subscribe to:
Comments (Atom)