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 procedure | Function | |
|---|---|---|
| Returns | 0..n result sets, OUTPUT params, INT return code | Scalar or table (exactly one) |
| Use in SELECT/WHERE/JOIN | No | Yes |
| Modify data (INSERT/UPDATE) | Yes | No (no side effects) |
| TRY...CATCH, transactions | Yes | No |
| Call | EXEC | Inside queries |
| Can call | Functions and procs | Only functions |
Scalar UDFs were notorious for row-by-row execution; SQL Server 2019 can inline many of them.