У меня возникли проблемы с пониманием разницы между хранимой процедурой и триггером в sql. Если кто-то может быть достаточно любезен, чтобы объяснить мне, что было бы здорово.
Заранее спасибо
У меня возникли проблемы с пониманием разницы между хранимой процедурой и триггером в sql. Если кто-то может быть достаточно любезен, чтобы объяснить мне, что было бы здорово.
Заранее спасибо
Хранимая процедура представляет собой пользовательский фрагмент кода, написанный в локальной версии PL/SQL, который может возвращать значение (делая его функцией), которое вызывается, вызывая его явно.
Триггер - это хранимая процедура, которая запускается автоматически, когда происходят различные события (например, обновление, вставка, удаление).
Хранимые процедуры IMHO следует избегать, если это абсолютно необходимо.
Подумайте о хранимой процедуре, подобной методу на объектно-ориентированном языке программирования. Вы передаете некоторые параметры, он работает, и он может что-то вернуть.
Триггеры больше похожи на обработчики событий на объектно-ориентированном языке программирования. По определенному условию он может либо (а) обрабатывать событие, либо (б) выполнить некоторую обработку и позволить событию продолжать пузыриться.
В отношении триггеров в 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, который вы сохранили как часть хранимой процедуры.
Мы можем создать хранимую процедуру следующим образом:
CREATE PROCEDURE dbo.Sample_Procedure
@param1 int = 0,
@param2 int
AS
SELECT @param1,@param2
RETURN 0;
Различия в обоих случаях
Триггер нельзя вызывать вручную, если хранимую процедуру можно вызвать вручную.
Триггер выполняется автоматически, когда происходит событие, и может использоваться для отчетов и защиты данных при удалении или удалении таблицы и данных из базы данных. Мы можем предотвратить запуск. С другой стороны, хранимая процедура должна быть вызвана кем-то.
Хранимую процедуру можно вызвать из внешнего интерфейса (клиентское приложение), но триггер не может быть вызван из клиентского приложения.
Некоторые различия между триггерами и процедурами:
Триггер срабатывает после вставки, обновления или удаления. Хранимая процедура - это серверная программа, которая запускается при ее вызове.
Хранимая процедура представляет собой группу операторов SQL, которая скомпилирована один раз, а затем может выполняться много раз. Триггеры называются объектами базы данных, которые неявно запускаются при возникновении инициирующего события. Действие триггера может быть запущено до или после события запуска. Триггеры аналогичны хранимым процедурам, но отличаются тем, как они вызываются. Пользователь триггера не вызывается непосредственно, когда пользовательская процедура непосредственно вызывается пользователем.
Хранимая процедура представляет собой фрагмент кода, который находится в и выполняется СУБД и может быть вызван явно клиентом или другими хранимыми процедурами. Обычно это написано в процедурном расширении SQL, например PL/SQL под Oracle или T-SQL под MS SQL Server, но некоторые СУБД поддерживают также более общие языки, такие как Java или .NET.
Триггер - это (некоторая) хранимая процедура, которая не может быть вызвана явно, и вместо этого выполняется автоматически в ответ на такие события, как вставка, обновление или удаление или строки в таблице.
Триггер - это особый вид хранимой процедуры. Он прикрепляется к таблице и запускается только при вставке, обновлении или удалении. Хранимые процедуры являются важными функциями, которые вы можете создавать и повторно использовать в таблице.
Хранимая процедура может быть вызвана другой хранимой процедурой, но не триггером. Хранимая процедура может выполняться всякий раз, когда пользователь хочет, но не является триггером. Триггер запускается только тогда, когда происходят события. Хранимая процедура может иметь оператор печати, несколько параметров и возвращаемые значения, но не триггер. Хранимая процедура может быть вызвана с передней стороны, но не с триггером.
***TRIGGERS***
Действие в определенное время.
Триггеры - это особый тип хранимой процедуры, который не вызывается непосредственно пользователем.
Оба являются объектами базы данных, содержащими блоки кода, которые могут использоваться для реализации бизнес-логики
Различия заключаются в следующем:
1) Triggers
автоматически, но для этого им нужны события.
(Пример: create
, alter
, drop
, insert
, delete
, update
).
2) Процедуры должны быть явно вызваны и затем выполнены.
Им не нужны create
, alter
, drop
, insert
, delete
, update
.
мы также можем выполнять процедуры автоматически, используя sp_procoption.
3) мы не можем передавать параметры внутри Triggers
,
пример: если мы хотим отобразить сообщение "ошибка"
с помощью триггера: нам нужно некоторое выражение DDL/DML
используя процедуру: NO DDL/DML
требуется
Мне нравится упрощать вещи, чтобы понять основную концепцию. Вот мои 2 цента. Как все говорят, они оба являются SQL-кодами. Мы можем использовать тот же код в триггере, а также подпрограмму (или хранимую процедуру). Возьмем аналогичный пример: предположим, что результат выполнения следующего запроса в вашем уме " GOOD MORNING".
SELECT db.greeting.message
FROM db.greeting
WHERE db.greeting.time='Morning'
Теперь разница MAIN между триггером и процедурой WHEN выполняется этот запрос (скорее как и что он делает).
Ситуация A: Кто-то говорит "Доброе утро" вам. Это событие, которое запускает триггер в вашем уме и ВЫПОЛНИТЬ этот запрос, и приводит к "УТРОМУ". Другими словами, этот код был вынужден выполнить по событию.
Ситуация B: Ты видел кого-то и приветствовал ее, прежде чем она это сделала. На этот раз не было НИКАКОГО СОБЫТИЯ, скорее ВЫ ВЫБЕРИТЕ, чтобы запустить этот код по вашей воле. Вот как именно процедуры CALLED.
Надеюсь, что это очистит некоторый туман.
Если вы знакомы с JavaScript, trigger
- это addEventListener
а addEventListener
Stored Procedure
- это callback
.
Разница между хранимой процедурой и триггером
Мы можем определить триггер как объект базы данных точно так же, как хранимую процедуру, или мы можем сказать, что это особый вид хранимой процедуры, которая запускается, когда в базе данных происходит событие. Мы можем выполнить SQL-запрос, который будет "делать что-то" в базе данных при возникновении события.
Triggers are fired implicitly while stored procedures are fired explicitly.