Подтвердить что ты не робот

SQL Различия между хранимой процедурой и триггерами

У меня возникли проблемы с пониманием разницы между хранимой процедурой и триггером в sql. Если кто-то может быть достаточно любезен, чтобы объяснить мне, что было бы здорово.

Заранее спасибо

4b9b3361

Ответ 1

Хранимая процедура представляет собой пользовательский фрагмент кода, написанный в локальной версии PL/SQL, который может возвращать значение (делая его функцией), которое вызывается, вызывая его явно.

Триггер - это хранимая процедура, которая запускается автоматически, когда происходят различные события (например, обновление, вставка, удаление).

Хранимые процедуры IMHO следует избегать, если это абсолютно необходимо.

Ответ 2

Подумайте о хранимой процедуре, подобной методу на объектно-ориентированном языке программирования. Вы передаете некоторые параметры, он работает, и он может что-то вернуть.

Триггеры больше похожи на обработчики событий на объектно-ориентированном языке программирования. По определенному условию он может либо (а) обрабатывать событие, либо (б) выполнить некоторую обработку и позволить событию продолжать пузыриться.

Ответ 3

В отношении триггеров в SQL Server: триггер - это специальный фрагмент кода, который автоматически запускается, когда событие происходит на сервере базы данных.

Триггеры DML выполняются, когда пользователь пытается изменить данные с помощью события языка управления данными (DML). События DML - это инструкции INSERT, UPDATE или DELETE в таблице или представлении. Эти триггеры срабатывают при любом действительном событии, независимо от того, затронуты ли какие-либо строки таблицы.

Мы можем создать триггер следующим образом:

CREATE TRIGGER TriggerName
ON [dbo].[TableName]
FOR DELETE, INSERT, UPDATE
AS
BEGIN
    SET NOCOUNT ON
END

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

  • Мы можем делать много вещей программирования в хранимой процедуре и выполняться снова и снова.
  • Мы можем создать процедуру, которая принимает входной процесс и выводит результат
  • Мы можем обработать ошибку с помощью try catch
  • Хранимые процедуры могут быть гнездом и звонить снова и снова с вложенным вызовом
  • Это более безопасно

Мы можем создать хранимую процедуру следующим образом:

CREATE PROCEDURE dbo.Sample_Procedure 
    @param1 int = 0,
    @param2 int  
AS
    SELECT @param1,@param2 
    RETURN 0;

Различия в обоих случаях

  • Триггер нельзя вызывать вручную, если хранимую процедуру можно вызвать вручную.

  • Триггер выполняется автоматически, когда происходит событие, и может использоваться для отчетов и защиты данных при удалении или удалении таблицы и данных из базы данных. Мы можем предотвратить запуск. С другой стороны, хранимая процедура должна быть вызвана кем-то.

  • Хранимую процедуру можно вызвать из внешнего интерфейса (клиентское приложение), но триггер не может быть вызван из клиентского приложения.

Ответ 4

Некоторые различия между триггерами и процедурами:

  • Мы можем выполнять хранимую процедуру всякий раз, когда хотим с помощью команды exec, но триггер может выполняться только тогда, когда событие (вставка, удаление и обновление) запускается в таблице, на которой определяется триггер.
  • Сохраненная процедура может принимать входные параметры, но мы не можем передавать параметры как входные данные в триггер.
  • Сохраненные процедуры могут возвращать значения, но триггер не может вернуть значение.
  • Мы можем использовать операторы транзакций, такие как начало транзакции, фиксация транзакции и откат внутри хранимой процедуры, но мы не можем использовать операторы транзакций внутри триггера
  • Мы можем вызвать хранимую процедуру из передней части (файлы .asp, файлы .aspx,.ascx файлы и т.д.), но мы не можем вызвать триггер из этих файлов.

Ответ 5

Триггер срабатывает после вставки, обновления или удаления. Хранимая процедура - это серверная программа, которая запускается при ее вызове.

Ответ 6

Хранимая процедура представляет собой группу операторов SQL, которая скомпилирована один раз, а затем может выполняться много раз. Триггеры называются объектами базы данных, которые неявно запускаются при возникновении инициирующего события. Действие триггера может быть запущено до или после события запуска. Триггеры аналогичны хранимым процедурам, но отличаются тем, как они вызываются. Пользователь триггера не вызывается непосредственно, когда пользовательская процедура непосредственно вызывается пользователем.

Ответ 7

Хранимая процедура представляет собой фрагмент кода, который находится в и выполняется СУБД и может быть вызван явно клиентом или другими хранимыми процедурами. Обычно это написано в процедурном расширении SQL, например PL/SQL под Oracle или T-SQL под MS SQL Server, но некоторые СУБД поддерживают также более общие языки, такие как Java или .NET.

Триггер - это (некоторая) хранимая процедура, которая не может быть вызвана явно, и вместо этого выполняется автоматически в ответ на такие события, как вставка, обновление или удаление или строки в таблице.

Ответ 8

Триггер - это особый вид хранимой процедуры. Он прикрепляется к таблице и запускается только при вставке, обновлении или удалении. Хранимые процедуры являются важными функциями, которые вы можете создавать и повторно использовать в таблице.

Ответ 9

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

Ответ 10

                    ***TRIGGERS*** 
  • Действие в определенное время.

  • Триггеры - это особый тип хранимой процедуры, который не вызывается непосредственно пользователем.

  • Когда триггер создается, он определяется для запуска, когда конкретный тип модификации данных выполняется против конкретной таблицы или столбца.

Ответ 11

Оба являются объектами базы данных, содержащими блоки кода, которые могут использоваться для реализации бизнес-логики

Различия заключаются в следующем:

1) Triggers автоматически, но для этого им нужны события. (Пример: create, alter, drop, insert, delete, update).

2) Процедуры должны быть явно вызваны и затем выполнены. Им не нужны create, alter, drop, insert, delete, update. мы также можем выполнять процедуры автоматически, используя sp_procoption.

3) мы не можем передавать параметры внутри Triggers,

, но мы можем передавать параметры внутри хранимых процедур

пример: если мы хотим отобразить сообщение "ошибка"

с помощью триггера: нам нужно некоторое выражение DDL/DML используя процедуру: NO DDL/DML требуется

Ответ 12

Мне нравится упрощать вещи, чтобы понять основную концепцию. Вот мои 2 цента. Как все говорят, они оба являются SQL-кодами. Мы можем использовать тот же код в триггере, а также подпрограмму (или хранимую процедуру). Возьмем аналогичный пример: предположим, что результат выполнения следующего запроса в вашем уме " GOOD MORNING".

SELECT db.greeting.message 
FROM db.greeting
WHERE db.greeting.time='Morning'

Теперь разница MAIN между триггером и процедурой WHEN выполняется этот запрос (скорее как и что он делает).

Ситуация A: Кто-то говорит "Доброе утро" вам. Это событие, которое запускает триггер в вашем уме и ВЫПОЛНИТЬ этот запрос, и приводит к "УТРОМУ". Другими словами, этот код был вынужден выполнить по событию.

Ситуация B: Ты видел кого-то и приветствовал ее, прежде чем она это сделала. На этот раз не было НИКАКОГО СОБЫТИЯ, скорее ВЫ ВЫБЕРИТЕ, чтобы запустить этот код по вашей воле. Вот как именно процедуры CALLED.

Надеюсь, что это очистит некоторый туман.

Ответ 13

Если вы знакомы с JavaScript, trigger - это addEventListener а addEventListener Stored Procedure - это callback.

Ответ 14

Разница между хранимой процедурой и триггером

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

    Triggers are fired implicitly while stored procedures are fired explicitly.