--creating functions --Aggregate, Scalar, TableValued Use Automart -- here is a really simple function that takes --an integer as an argument and returns --the cube of the integer go Create function CubeIt (@number int) --parameters to pass in returns int --set return type As--always start with an as Begin--begin function block Declare @cubed int set @cubed=@number*@number*@number return @cubed End--end Function block Go Select dbo.cubeiT(4) as cubed --this function determins if an employe has --worked more than 5 years --it takes employeeId and hiredate --as parameters Go Alter function ServiceRecognition (@employeeID int, @hireDate date) returns Nvarchar(50)--parameters As--start function Begin--begin function block --declare a variable--all variables must start with @ Declare @currentDate date --set the value of the variable Set @currentDate=GETDATE() Declare @years int Set @years = DateDiff(yy,@HireDate, @CurrentDate) Declare @message Nvarchar(50) if @years > 5 --if statement to check years Begin--begin if block set @message= cast(@EmployeeID as Nvarchar(2)) + ', has been here ' + cast(@years as nvarchar(4)) + ' Give them a raise ' End --end if block else Begin --begin else block set @message= cast(@EmployeeID as Nvarchar(2))+ ' has been here ' + cast(@years as nvarchar(4)) End--end else block return @message --return result End go --use the function in a query --you must specify the function owner, dbo in this case Select EmployeeID, LastName, FirstName, Hiredate, dbo.ServiceRecognition(employeeID, HireDate) as Years From Person p inner join Employee e on p.PersonKey=e.Personkey Where employeeID=4 --Determine the amount due for a service --the price is in AutoService --Other pricing Employee.ServiceDetail Go Create function fx_AmountDue (@ServiceKey int, @discount decimal(3,2), @Tax decimal(4,3)=.095)--parameters returns money --return type As Begin Declare @Price money Select @Price=serviceprice from Customer.AutoService Where autoServiceID=@serviceKey Declare @Total money if @discount is null Begin set @Total=@price + (@price*@Tax) End Else Begin set @total = (@price - (@Price * @discount))+@price*@tax end return @Total End --use the function in a query Select ServiceDate, ServiceName, VehicleID, ServicePrice, TaxPercent, DiscountPercent, dbo.fx_AmountDue(sd.autoserviceID, discountPercent, TaxPercent) as subTotal From Customer.AutoService s inner Join Employee.VehicleServiceDetail sd on s.AutoServiceID=sd.AutoServiceID inner join Employee.VehicleService vs on vs.VehicleServiceID=sd.VehicleServiceID Where sd.VehicleServiceID =3 --use the function with an aggregate Select Sum(dbo.fx_AmountDue(sd.autoserviceID, discountPercent, TaxPercent)) as Total From Customer.AutoService s inner Join Employee.VehicleServiceDetail sd on s.AutoServiceID=sd.AutoServiceID inner join Employee.VehicleService vs on vs.VehicleServiceID=sd.VehicleServiceID Where sd.VehicleServiceID =3
Wednesday, February 11, 2015
Creating Functions
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment