Чем отличаются функции от хранимых процедур в T-SQL (Microsoft SQL Server)

Приветствую всех посетителей сайта Info-Comp.ru! Сегодня мы с Вами поговорим о том, чем же отличаются функции от хранимых процедур в Microsoft SQL Server, и для наглядности сформируем итоговую таблицу отличий.

Чем отличаются функции от хранимых процедур в T-SQL

Заметка! Обзор Azure Data Studio. Что это за инструмент и для чего он нужен.

Функции и хранимые процедуры T-SQL

В Microsoft SQL Server существуют такие объекты базы данных, как функции и хранимые процедуры, которые используются для хранения неких уже реализованных алгоритмов на языке T-SQL.

Примечание! В данном материале речь идет о пользовательских функциях и хранимых процедурах, не о системных, которые уже реализованы в SQL Server, а о тех, которые создаем мы с Вами, т.е. программисты T-SQL.

Функции и хранимые процедуры используются в языке T-SQL для реализации бизнес логики, упрощения сложных SQL запросов, а также для написания различных инструкций администрирования баз данных и сервера, которые периодически необходимо выполнять.

Иными словами, функции и хранимые процедуры – это своего рода мини программы внутри базы данных, они помогают нам реализовывать нужные нам алгоритмы и хранить их в базе данных. Кроме этого, функции и хранимые процедуры позволяют декомпозировать одну глобальную задачу на несколько мелких, тем самым упрощая решение этой задачи и дальнейшее сопровождение этого решения, так как весь алгоритм становится модульным и более гибким.

У начинающих может возникнуть вопрос – а чем отличаются функции от процедур? Или это одно и то же?

Конечно же, это не одно и то же, и между этими понятиями, в контексте языка T-SQL, есть нескольких ключевых отличный.

Отличия функций от хранимых процедур в T-SQL

Давайте перейдем к рассмотрению основных отличный функций от хранимых процедур, а чтобы было более наглядно, сделаем это в виде таблицы.

Функция

Хранимая процедура

Функция должна возвращать значение. Хранимая процедура может как возвращать, так и не возвращать значение.
Функции не могут возвращать несколько результирующих наборов. Хранимая процедура может сформировать и вернуть несколько результирующих наборов данных.
Функции можно использовать в операторе SELECT. Процедуры нельзя использовать в операторе SELECT и во всех его секциях (WHERE, JOIN, HAVING и т.д.), так как процедуры вызываются с помощью команды EXECUTE или EXEC.
В функциях можно использовать только оператор SELECT на выборку данных.

Операторы DML (INSERT, UPDATE, DELETE) для модификации данных использовать нельзя.

В хранимых процедурах можно использовать оператор SELECT, а также операторы DML (INSERT, UPDATE, DELETE) для модификации данных.
Из функции нельзя вызвать хранимые процедуры. В хранимых процедурах можно вызывать и функции, и другие хранимые процедуры.
Конструкцию для обработки ошибок TRY CATCH нельзя использовать в функциях. Так же как нельзя использовать инструкцию RAISERROR. В хранимых процедурах можно использовать и конструкцию TRY CATCH, и инструкцию RAISERROR.
В функциях запрещено использование транзакций. В хранимых процедурах транзакции разрешены.
В функциях можно использовать только табличные переменные, временные таблицы использовать не получится. В хранимых процедурах можно использовать как табличные переменные, так и временные таблицы.
В функциях нельзя использовать динамический SQL. В процедурах можно использовать динамический SQL.
В функциях можно использовать только входные параметры. В хранимых процедурах можно использовать как входные, так и выходные параметры.

Заметка! Курсы по T-SQL для начинающих.

На сегодня это все, надеюсь, материал был Вам полезен, пока!

Понравилась статья? Поделиться с друзьями:
Заметки IT специалиста
Комментарии: 1
  1. Андрей

    В функциях можно использовать только оператор SELECT на выборку данных.
    Операторы DML (INSERT, UPDATE, DELETE) для модификации данных использовать нельзя.

    Если в функции задекларировать @table табличный тип данных, то к нему DML применим

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
Нажимая на кнопку «Отправить комментарий», я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.