Разница между хранимыми процедурами и пользовательскими функциями - PullRequest
40 голосов
/ 11 января 2010

Кто-нибудь может объяснить, какова точная разница между хранимыми процедурами и пользовательскими функциями и в каком контексте каждая из них полезна?

Ответы [ 4 ]

46 голосов
/ 14 марта 2013

Это то, что я всегда имею в виду:)

  • Процедура может возвращать ноль или n значений, тогда как функция может возвращать одно значение, которое является обязательным.
  • Процедуры могут иметь параметры ввода / вывода, тогда как функции могут иметь только входные параметры.
  • Процедура позволяет в нем выбирать, а также оператор DML, тогда как функция позволяет в нем только оператор выбора.
  • Функции могут быть вызваны из процедуры, тогда как процедуры не могут быть вызваны из функции.
  • Исключение можно обработать блоком try-catch в процедуре, тогда как блок try-catch нельзя использовать в функции.
  • Мы можем перейти к управлению транзакциями в процедуре, тогда как мы не можем войти в функцию.
  • Процедуры не могут использоваться в операторе выбора, тогда как функция может быть встроена в оператор выбора.
  • UDF может использоваться в инструкциях SQL в любом месте раздела WHERE / HAVING / SELECT, где хранимые процедуры не могут быть.
  • UDF, которые возвращают таблицы, могут рассматриваться как другой набор строк. Это можно использовать в соединениях с другими таблицами.
  • Встроенные UDF могут быть представлениями, которые принимают параметры и могут использоваться в JOIN и других операциях Rowset.

Источник http://www.codeproject.com/Tips/286539/Difference-between-stored-procedure-and-function

14 голосов
/ 11 января 2010

Функция всегда возвращает значение и может не выполнять операторы DML (INSERT / UPDATE / DELETE).

Хранимая процедура не может вернуть значение - вам нужно использовать параметр OUT - и может запускать операторы DML.

Преимущество использования функции по сравнению с хранимой процедурой?


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

5 голосов
/ 11 января 2010

Определяемая пользователем функция имеет несколько ограничений, например, может использоваться статистика DML и т. Д. Просьба проверить

0 голосов
/ 26 декабря 2018

Отличия

  1. Процедуры могут принимать параметры ввода (по умолчанию), выхода и типа входа для него. Функции могут принимать только параметры типа ввода.

  2. Процедуры могут возвращать или не возвращать значение или могут возвращать более одного значения с использованием параметров OUTPUT и / или INOUT. Процедура может возвращать до 1024 значений через параметры OUTPUT и / или INOUT. Функция всегда возвращает только одно значение.

  3. Хранимая процедура всегда возвращает целочисленное значение по умолчанию ноль. Тип возврата функции может быть скалярным или табличным или табличным значением.

  4. Хранимые процедуры могут создавать таблицы, но не могут возвращать таблицы. Функции могут создавать, обновлять и удалять переменные таблицы. Может вернуть таблицу

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

  6. Хранимые процедуры хранятся в базе данных в скомпилированном виде. Функция анализируется и компилируется только во время выполнения.

  7. Хранимые процедуры можно вызывать независимо, используя ключевое слово exec. Хранимая процедура не может использоваться в предложении select / where / has. Функция вызывается из предложения select / where / using. Даже мы можем объединить две функции.

  8. Обычно хранимая процедура будет использоваться для выполнения определенных задач. Функции будут использоваться для вычисления стоимости. Хранимая процедура позволяет getdate () или другие недетерминированные функции могут быть разрешены. Функция не допускает недетерминированные функции, такие как getdate ().

  9. В хранимых процедурах мы можем использовать операторы транзакций. Мы не можем использовать функции.

  10. Хранимые процедуры могут выполнять все операции DML, такие как вставка новой записи, обновление записей и удаление существующих записей. Функция не позволяет нам выполнять операции DML в таблицах базы данных, как в хранимой процедуре. Это позволяет нам делать только операцию выбора. Это не позволит делать DML на существующих таблицах. Но все же мы можем выполнять операцию DML только с табличной переменной внутри пользовательских функций.

  11. Временные таблицы (производные) могут быть созданы в хранимых процедурах. Это невозможно в случае функций.

  12. Когда в операторах sql обнаружена ошибка, T-SQL игнорирует ошибку в SPROC и переходит к следующему оператору в оставшемся коде. В случае функций T-SQL остановит выполнение следующих операторов.

Ссылка по ссылке:

https://www.spritle.com/blogs/2011/03/03/differences-between-stored-procedures-and-user-defined-functions/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...