SQL Server: T-SQL Features: Functions
Module: Database-Specific Features
**Variables**: DECLARE @name TYPE; SET @name = value; or SELECT @name = value FROM table;
**Control Flow**: IF condition BEGIN ... END; WHILE condition BEGIN ... END; CASE WHEN ... THEN ... END;
**Error Handling**: BEGIN TRY ... END TRY BEGIN CATCH ... END CATCH; Use ERROR_MESSAGE(), ERROR_SEVERITY(), ERROR_STATE();
**Procedures**: CREATE PROCEDURE name @param TYPE AS BEGIN ... END; EXEC name @param = value;
**Functions**: CREATE FUNCTION name(@param TYPE) RETURNS TYPE AS BEGIN ... RETURN value; END;
**Temp Tables**: CREATE TABLE #temp (...); or DECLARE @table TABLE (...);
**Advanced**: OUTPUT INSERTED.*, DELETED.* INTO @table; MERGE INTO target USING source ON condition WHEN MATCHED THEN ...;
Variables: DECLARE @name TYPE; SET @name = value; or SELECT @name = value FROM table;
Control flow: IF condition BEGIN ... END; WHILE condition BEGIN ... END; BREAK; CONTINUE;
Error handling: BEGIN TRY ... END TRY BEGIN CATCH ... END CATCH; Use ERROR_MESSAGE(), ERROR_SEVERITY(), ERROR_STATE(), ERROR_LINE();
Procedures: CREATE PROCEDURE name @param TYPE, @output TYPE OUTPUT AS BEGIN ... END; EXEC name @param = value, @output = @var OUTPUT;
Functions: Scalar returns single value, inline table-valued returns table (better performance), multi-statement table-valued materializes results;
Temp tables: #temp (session-scoped, supports indexes), ##temp (global), @table (table variable, no logging);
Advanced: OUTPUT INSERTED.*, DELETED.* INTO @table; MERGE INTO target USING source ON condition WHEN MATCHED/NOT MATCHED THEN ...;
Transactions: BEGIN TRANSACTION; ... COMMIT/ROLLBACK; Check @@TRANCOUNT before rollback;
T-SQL: Variables with @, IF/ELSE/WHILE, TRY/CATCH, stored procedures with OUTPUT parameters, table variables, MERGE, OUTPUT clause, THROW
PL/pgSQL: Variables without @, IF/ELSIF/LOOP, EXCEPTION WHEN, functions return values (no procedures until v11), temporary tables, INSERT...ON CONFLICT, RETURNING clause, RAISE
Stored procedures: Variables with @, IF/ELSEIF/LOOP, DECLARE...HANDLER, procedures with OUT parameters, temporary tables, INSERT...ON DUPLICATE KEY UPDATE, no OUTPUT clause, SIGNAL
PL/SQL: Variables without @, IF/ELSIF/LOOP, EXCEPTION WHEN, procedures and functions, collections (similar to table variables), MERGE, RETURNING clause, RAISE_APPLICATION_ERROR
Core references in this topic include WHERE, =, <, >, <=, >=. Learn what each one does, when to use it, and the execution or engine rules that matter.
WHERE
Filters rows before projection and sorting. It decides which rows continue through the query pipeline.
SELECT ... FROM table WHERE condition;
Most performance issues start with a weak WHERE clause or a missing supporting index.
=
Returns rows where the left and right values are exactly equal.
column = value
Use with exact matches. Do not use = NULL.
<, >, <=, >=
Range comparison operators for less-than, greater-than, and inclusive boundary checks.
salary >= 80000
AND
Requires every condition in the boolean expression to evaluate to TRUE.
condition_a AND condition_b
AND has higher precedence than OR.
IS NULL / IS NOT NULL
Tests whether a value is missing. SQL NULL semantics require dedicated NULL predicates.
manager_id IS NULL
Never use = NULL or != NULL.
LIKE