На SQL сервере у вас есть хранимые процедуры и табличные и скалярные функции. Еще одна удобная функция - это обычные табличные выражения.
Функции , которые можно использовать непосредственно в SQL выражениях (SELECT
, INSERT
, UPDATE
, JOIN
), так что их можно использовать повторно.
Табличная функция:
SELECT *
FROM myFunction(@UserID) as f
INNER JOIN users AS u ON f.UserID = u.ID
Скалярная функция, которую можно вставить в SELECT
часть запроса.
SELECT u.ID, myFunction(u.ID)
FROM users as u
Common табличные выражения удобны для удобства чтения:
;WITH MyCTP AS
(
// complex SQL
)
SELECT *
FROM myTable INNER JOIN MyCTP ON...
Вы можете иметь несколько CTE перед оператором SELECT, но вы можете использовать их только в том утверждении, над которым они были объявлены.
Хранимые процедуры
Они немного болезненны в a $$, потому что вам нужно захватить результат в переменные, чтобы использовать их в вызывающей хранимой процедуре.
DECLARE @Input INT
DECLARE @Result INT
EXEC myStoredProcedure @Input, @Result OUT
Если процедура выводит таблицу, она становится еще сложнее. Вам нужно использовать курсор для захвата результата.