Introduction to Functions
Introduction to Functions
Functions Fundamentals
Introduction
A function is a section of code that is used to perform an isolated assignment. Once it has performed its assignment, the function can be accessed to present its result(s). That's how functions are using most traditional computer languages. Just as done in those languages, functions in Microsoft SQL Server can be used to perform various types of operations.
In Transact-SQL, a function is considered an object. After creating the function object, it becomes part of a database. You can then execute it when necessary.
Creating a Function |
There are various ways you can start the creation of a function:
-- ================================================ -- Template generated from Template Explorer using: -- Create Scalar Function (New Menu).SQL -- -- Use the Specify Values for Template Parameters -- command (Ctrl-Shift-M) to fill in the parameter -- values below. -- -- This block of comments will not be included in -- the definition of the function. -- ================================================ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date, ,> -- Description: <Description, ,> -- ============================================= CREATE FUNCTION <Scalar_Function_Name, sysname, FunctionName> ( -- Add the parameters for the function here <@Param1, sysname, @p1> <Data_Type_For_Param1, , int> ) RETURNS <Function_Data_Type, ,int> AS BEGIN -- Declare the return variable here DECLARE <@ResultVar, sysname, @Result> <Function_Data_Type, ,int> -- Add the T-SQL statements to compute the return value here SELECT <@ResultVar, sysname, @Result> = <@Param1, sysname, @p1> -- Return the result of the function RETURN <@ResultVar, sysname, @Result> END GOYou can then modify to customize it
-- ================================================ -- Template generated from Template Explorer using: -- Create Scalar Function (New Menu).SQL -- -- Use the Specify Values for Template Parameters -- command (Ctrl-Shift-M) to fill in the parameter -- values below. -- -- This block of comments will not be included in -- the definition of the function. -- ================================================ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date, ,> -- Description: <Description, ,> -- ============================================= CREATE FUNCTION <Scalar_Function_Name, sysname, FunctionName> ( -- Add the parameters for the function here <@Param1, sysname, @p1> <Data_Type_For_Param1, , int> ) RETURNS <Function_Data_Type, ,int> AS BEGIN -- Declare the return variable here DECLARE <@ResultVar, sysname, @Result> <Function_Data_Type, ,int> -- Add the T-SQL statements to compute the return value here SELECT <@ResultVar, sysname, @Result> = <@Param1, sysname, @p1> -- Return the result of the function RETURN <@ResultVar, sysname, @Result> END GO
In Transact-SQL, the primary formula of creating a function is:
CREATE FUNCTION SchemaName.FunctionName()
We already mentioned that, in Transact-SQL, a function is created as an object. As such, it must have a name. In our lessons, here are the rules we will use to name our functions:
|
For a function to be useful, it must produce a result. This is also said that the function returns a result or a value. When creating a function, you must specify the type of value that the function would return. To provide this information, after the name of the function, type the RETURNS keyword followed by a definition for a data type. Here is a simple example:
CREATE FUNCTION Administration.Addition() RETURNS Decimal(6,3)
After specifying the type of value that the function would return, you can create a body for the function. The body of a function starts with the BEGIN and ends with the END keywords. Here is an example:
CREATE FUNCTION Administration.Addition() RETURNS Decimal(6,3) BEGIN END
Optionally, you can type the AS keyword before the BEGIN keyword:
CREATE FUNCTION Administration.Addition() RETURNS Decimal(6,3) AS BEGIN END
Between the BEGIN and END keywords, which is the section that represents the body of the function, you can define the assignment the function must perform. After performing this assignment, just before the END keyword, you must specify the value that the function returns. This is done by typing the RETURN keyword followed by an expression. A sample formula is:
CREATE FUNCTION Administration.Addition() RETURNS Decimal(6,3) AS BEGIN RETURN Expression END
Here is an example
CREATE FUNCTION GetFullName() RETURNS nvarchar(100) AS BEGIN RETURN N'Doe, John' END
Practical Learning: Creating Functions |
USE IceCreamShop; GO CREATE FUNCTION Payroll.CalculateWeeklySalary() RETURNS Decimal(8, 2) AS BEGIN RETURN 880.44 END; GO
Calling a Function |
|
After a function has been created, you can use the value it returns. Using a function is also referred to as calling it. To call a function, you must qualify its name. To do this, type the name of the schema that owns the function, followed by the period operator, followed by the name of the function, and its parentheses. The formula to follow is: SchemaName.FunctionName() |
As an option, you can start with the name of the database in which the function was created. The formula to use is:
DatabaseName.SchemaName.FunctionName()
Because a function returns a value, you can use that value as you see fit. For example, you can use either PRINT or SELECT to display the function's value in the Query Editor. Here is an example that calls the above Addition() function:
PRINT Exercise.dbo.GetFullName();
As an alternative, to call a function, in the Object Explorer, right-click its name, position the mouse on Script Function As, SELECT To, and click New Query Editor Window.
Practical Learning: Calling a Function |
PRINT IceCreamShop.Payroll.CalculateWeeklySalary(); GO
SELECT IceCreamShop.Payroll.CalculateWeeklySalary() AS [Weekly Salary]; GO
Functions Maintenance |
Introduction |
Because a function in Transact-SQL is treated as an object, it may need maintenance. Some of the actions you would take include renaming, modifying, or deleting a function.
Renaming a Function |
If you create a function and execute it, it is stored in the Scalar-Valued Functions node with the name you gave it. If you want, you can change that name but keep the functionality of the function.
To rename a function, in the Object Explorer, right-click it and click Rename. Type the desired new name and press Enter.
If you create a function and decide that you don't need it any more, you can delete it.
To visually delete a function in the Object Explorer, locate the function in the Functions section, right-click it and click Delete. The Delete Object dialog box would come up. If you still want to delete the function, click OK; otherwise, click Cancel.
To programmatically delete a function:
|
Practical Learning: Deleting a Function |
Declaring Local Variables |
As mentioned already, in the body of the function, you define what the function is supposed to take care of. As a minimum, a function can return a simple number, typed on the right side of the RETURNS keyword. Here is an example:
CREATE FUNCTION Administration.Addition() RETURNS int BEGIN RETURN 1 END
You can also declare new variables in the body of the function to help in carrying the assignment. A variable declared in the body of a function is referred to as a local variable. Once such a variable has been declared, it can be used like any other variable. Here is an example:
CREATE FUNCTION Administration.Addition() RETURNS int BEGIN DECLARE @Number1 int SET @Number1 = 588 RETURN @Number1 + 1450 END
Practical Learning: Declaring Local Variables |
CREATE FUNCTION Payroll.CalculateWeeklySalary() RETURNS Decimal(8, 2) AS BEGIN DECLARE @HourlySalary Decimal(8, 2), @WeeklyHours Real, @FullName varchar(100); SET @HourlySalary = 24.15; SET @WeeklyHours = 42.50; RETURN @HourlySalary * @WeeklyHours END; GO
SELECT IceCreamShop.Payroll.CalculateWeeklySalary() AS [Weekly Salary]; GO
Data Entry and Functions |
You can involve a function in data entry. As an example, you can call a function that returns a value and assign that value to a column. You can first create your own function and use it, or you can use one of the built-in functions. Normally, the best way is to check the online documentation to find out if the assignment you want to perform is already created. Using a built-in function would spare you the trouble of writing your own function. You can also involve the function in an operation, then use the result as the value to assign to a field. You can also call a function that takes one or more arguments; make sure you respect the rules of passing an argument to a function when calling it. |
Functions Parameters
Introduction
In order to carry its assignment, a function can be provided with some values. Put it another way, when you create a function, instead of, or in addition to, local variables, you may want the code that will call the function to provide the values needed to perform the assignment. For example, imagine you want to create a function that would generate employees email addresses when a user has entered a first and last name. At the time you are creating the function, you cannot know or predict the names of employees, including those who have not even been hired yet. In this case, you can write the whole function but provide one or more placeholders for values that would be supplied when the function is called.
An external value that is provided to a function is called a parameter. A function can also take more than one parameter. Therefore, when you create a function, you also decide whether your function would take one or more parameters and what those parameters, if any, would be.
We have already seen that a function's name is also followed by parentheses. If the function doesn't use an external value, its parentheses can be left empty. If a function will use an external value, when you create the function, you must specify a name and the type of value of the parameters. |
The name of the parameter is preceded by the @ sign, like a variable. Here is an example:
CREATE FUNCTION Administration.Addition(@Number1 Decimal(6,2))
When a function takes a parameter, in the body of the function, you can use the parameter as if you knew its value, as long as you respect the type of that value.
Here is an example:
CREATE FUNCTION Administration.Addition(@Number1 Decimal(6,2)) RETURNS Decimal(6,2) BEGIN RETURN @Number1 + 1450 END
Calling a Parameterized Function |
When you call a function that takes one parameter, you must supply a value for that argument. To do this, type the value of the parameter in the parentheses of the function. Here is an example:
A Function With Various Arguments |
Instead of only one parameter, you can also create a function that takes more than one parameter. In this case, separate the parameters in the parentheses of the function with a comma. Here is an example:
CREATE FUNCTION Administration.Addition(@Number1 Decimal(6,2), @Number2 Decimal(6,2))
Once again, in the body of the function, you can use the parameters as if you already knew their value. You can also declare local variables and involve them with parameters as you see fit. Here is an example:
CREATE FUNCTION Administration.Addition(@Number1 Decimal(6,2), @Number2 Decimal(6,2)) RETURNS Decimal(6,2) BEGIN DECLARE @Result Decimal(6,2) SET @Result = @Number1 + @Number2 RETURN @Result END; GO
When calling a function that takes more than one parameter, in the parentheses of the function, provide a value for each parameter, in the exact order they appear in the parentheses of the function. Here is an example:
PRINT Exercise.Administration.Addition(1450, 228);
You can also pass the names of already declared and initialized variables. Here is an example that calls the above function:
DECLARE @Nbr1 Decimal(6,2), @Nbr2 Decimal(6,2) SET @Nbr1 = 4268.55 SET @Nbr2 =26.83 SELECT @Nbr1 As First, @Nbr2 As Second, Exercise.Administration.Addition(@Nbr1, @Nbr2) AS Result
This would produce:
Practical Learning: Creating Functions With Arguments |
CREATE FUNCTION Payroll.CalculateWeeklySalary(@WeeklyHours Decimal(6,2), @HourlySalary SmallMoney) RETURNS Decimal(8, 2) AS BEGIN DECLARE @Weekly SmallMoney SELECT @Weekly = @WeeklyHours * @HourlySalary RETURN @Weekly END; GO
DECLARE @Hours Decimal(5,2), @Hourly SmallMoney SELECT @Hours = 42.50 SELECT @Hourly = 18.62 SELECT 'Hermine Singh' As [Employee Name], @Hours As [Weekly Hours], @Hourly As [Hourly Salary], RealEstate1.Payroll.CalculateWeeklySalary(@Hours, @Hourly) AS [Weekly Salary]; GO
Default Arguments |
When a function with argument is called, a value must be passed for each argument. Here is an example of such a function:
USE Exercise;
GO
CREATE FUNCTION CalculateTaxAmount(@Price money, @Rate decimal(6, 2))
RETURNS decimal(6, 3)
AS
BEGIN
DECLARE @ResultVar money
SELECT @ResultVar = @Price * @Rate / 100
RETURN @ResultVar
END
GO
Here are examples of calling the function:
USE Exercise; GO PRINT dbo.CalculateTaxAmount(140.00, 5.75); PRINT dbo.CalculateTaxAmount(195.95, 5.75); PRINT dbo.CalculateTaxAmount(250.00, 7.55); PRINT dbo.CalculateTaxAmount(125.95, 5.75); GO
This would produce:
8.05 11.27 18.88 7.24
In some cases, if the function is usually called with the same value for an argument, you can specify a default value for that argument. When such a function is called, you can omit the value of the argument.
To specify a default value for an argument, in the parentheses of the function, after the name and data type of the argument, type =, followed by the desired value. Here is an example:
USE Exercise; GO CREATE FUNCTION CalculateTaxAmount(@Price money, @Rate decimal(6, 2) = 5.75) RETURNS decimal(6, 2) AS BEGIN DECLARE @ResultVar money SELECT @ResultVar = @Price * @Rate / 100 RETURN @ResultVar END GO
When calling a function that has a default value for an argument, you don't have to pass a value for that argument, although you can if you want. When calling the function, in the placeholder of the argument, type the DEFAULT keyword. Here are examples of calling the latest version of our function: USE Exercise; GO PRINT dbo.CalculateTaxAmount(140.00, DEFAULT); PRINT dbo.CalculateTaxAmount(195.95, 5.75); PRINT dbo.CalculateTaxAmount(250.00, 7.55); PRINT dbo.CalculateTaxAmount(125.95, default); GO |
Practical Learning: Ending the Lesson |
USE master; GO DROP DATABASE IceCreamShop; GO DROP DATABASE University1; GO
|
||
Previous | Copyright © 2000-2022, FunctionX | Next |
|