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



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



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

983   11  
sql

11 ответов:

Хранимая процедура-это определенный пользователем фрагмент кода, написанный в локальной версии 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

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

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

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

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

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

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

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

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

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

  1. мы можем выполнить хранимую процедуру, когда захотим, с помощью команды exec, но триггер может быть выполнен только при запуске события (insert, delete и update) в таблице, на которой определен триггер.
  2. Хранимая процедура может принимать входные параметры, но мы не можем передавать параметры в качестве входных в триггер.
  3. хранимые процедуры могут возвращать значения, но триггер не может возвращать значение.
  4. мы можем использовать операторы транзакций, такие как begin transaction, commit transaction и rollback внутри хранимой процедуры, но мы не можем использовать операторы транзакций внутри триггера
  5. мы можем вызвать хранимую процедуру из переднего плана (.ASP-файл, .файлы aspx, .ascx файлы, и т. д.) но мы не можем вызвать триггер из этих файлов.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример: если мы хотим вывести сообщение "error"

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

Comments

    Ничего не найдено.