Roadmap › SQL Server & T-SQL › Module: Programmability
Lessons in this course (19)

11. Functions: scalar, inline TVF, multi-statement TVF

Intermediate★ Must knowLesson 11 of 19
sql
-- Scalar function
CREATE OR ALTER FUNCTION dbo.fn_TaxAmount (@Amount DECIMAL(12,2)) RETURNS DECIMAL(12,2)
AS BEGIN RETURN @Amount * 0.18; END;

-- Inline table-valued function (best performing — expanded like a view)
CREATE OR ALTER FUNCTION dbo.fn_OrdersByCustomer (@CustomerId INT) RETURNS TABLE
AS RETURN (SELECT OrderId, OrderDate, Total FROM dbo.Orders WHERE CustomerId = @CustomerId);

SELECT * FROM dbo.fn_OrdersByCustomer(42);
SELECT c.Name, o.* FROM Customers c CROSS APPLY dbo.fn_OrdersByCustomer(c.CustomerId) o;
Stored procedureFunction
Returns0..n result sets, OUTPUT params, INT return codeScalar or table (exactly one)
Use in SELECT/WHERE/JOINNoYes
Modify data (INSERT/UPDATE)YesNo (no side effects)
TRY...CATCH, transactionsYesNo
CallEXECInside queries
Can callFunctions and procsOnly functions

Scalar UDFs were notorious for row-by-row execution; SQL Server 2019 can inline many of them.