Table functions in SQL
Table functions are functions that return a set of results in table. Next we will see, with examples, the statements to create, execute, modify and eliminate user functions.
CREATE FUNCTION
The CREATE FUNCTION
statement allow us to create new functions in the database. In the following example we will create a new table funciton called returnCustomer
that will return a result in table form with Customers
information.
CREATE FUNCTION dbo.returnCustomer (@id INT)
RETURNS TABLE
AS
RETURN (
SELECT [name],
lastName,
[address],
bankAccount
FROM Customers
WHERE customerId = @id);
GO
This function receives an id
as an input parameter, and filters the Clients
table to return a record with the fields specified in the internal SELECT
.
It is also possible to internally declare a table structure with its colums, that we could fill in with the data of a SELECT
through INSERT
.
CREATE FUNCTION dbo.returnAlternativeCustomer (@id INT)
RETURNS @customerResult TABLE
(
[name] VARCHAR(50),
lastName VARCHAR (255),
[address] VARCHAR (255),
bankAccount INT
)
AS
BEGIN
INSERT @customerResult
SELECT [name],
lastName,
[address],
bankAccount
FROM Customers
WHERE customerId=@id
RETURN
END
GO
EXECUTE
We can execute functions directly from the SELECT
statement. To do this, we just write the function name after the SELECT
statement. If the function receives input parameters, we should introduce the respective value between the function parenthesis, respecting the order in wich they were declare and the datatype they can support.
SELECT * FROM returnCustomer(2);
The result of the execution in the form of a table would be:
name | lastName | address | bankAccount |
---|---|---|---|
Mavin | Petitt | 2336 cottonwood Lane | 123456789 |
ALTER FUNCTION
ALTER FUNCTION defines the statement to modify user functions that have already been declared. The modifications may affect the arguments or input parameters, the type of data returned in the RETURNS
or the internal logic.
We proceed to modify the returnCustomer
function so that it receives instead of an id
, the first and last name as input parameters:
ALTER FUNCTION dbo.returnCustomer (@name VARCHAR (50), @lastName VARCHAR (50))
RETURNS TABLE
AS
RETURN (
SELECT [name],
lastName,
[address],
bankAccount
FROM Customers
WHERE [name] = @name
AND lastName = @lastName);
GO
SELECT * FROM returnCustomer('Janice', 'Haynes');
name | lastName | address | bankAccount |
---|---|---|---|
Janice | Haynes | 4822 Radio Park Drive | 111222333 |
DROP FUNCTION
The DROP FUNCTION
statement deletes the specified function from the system.
To delete the function:
DROP FUNCTION IF EXISTS dbo.returnCustomer;
As with other types of DROP, it is recommended to always use the IF EXISTS
clause.