Триггер – это откомпилированная SQL-процедура, исполнение которой обусловлено наступлением определенных событий внутри базы данных.
Триггеры – особый инструмент SQL-сервера, используемый для поддержания целостности данных.
Триггер представляет собой специальный тип процедур, запускаемых сервером автоматически при попытке изменения данных в таблицах, с которыми триггеры связаны. Каждый триггер привязывается к конкретной таблице. В случае обнаружения ошибки или нарушения целостности данных происходит отмена всех сделанных изменений.
С помощью триггеров достигаются следующие цели:
- проверка корректности введенных данных и выполнение сложных (дополнительных) ограничений целостности данных (которые трудно, если вообще возможно, поддерживать с помощью ограничений целостности, установленных для таблицы);
- выдача предупреждений (напоминающих о необходимости выполнения некоторых действий при обновлении таблицы, реализованном определенным образом);
- накопление аудиторской информации (посредством фиксации сведений о внесенных изменениях и тех лицах, которые их выполнили);
- поддержка репликации.
Недостатки использования триггеров:
- сложность: при перемещении некоторых функций в базу данных усложняются задачи ее проектирования, реализации и администрирования;
- скрытая функциональность: перенос части функций в базу данных и сохранение их в виде одного или нескольких триггеров может привести к скрытию от пользователя некоторых функциональных возможностей. (Хотя это в определенной степени упрощает его работу, но может стать причиной незапланированных, потенциально нежелательных побочных эффектов, поскольку в этом случае пользователь не в состоянии контролировать все процессы, происходящие в базе данных);
- влияние на производительность: перед выполнением каждой команды по изменению состояния базы данных СУБД должна проверить триггерное условие с целью выяснения необходимости запуска триггера для этой команды.
Типы триггеров
|
Существует три типа триггеров:
- INSERT TRIGGER – запускаются при попытке вставки данных с помощью команды INSERT.
- UPDATE TRIGGER – запускаются при попытке изменения данных с помощью команды UPDATE.
- DELETE TRIGGER – запускаются при попытке удаления данных с помощью команды DELETE.
Понятие хранимой процедуры
Хранимые процедуры это группа связанных между собой операторов SQL или функций, хранимых в откомпилированном виде. Использование хранимых процедур вместо отдельных операторов SQL дает пользователю следующие преимущества:
- хранение в исполняемом формате (перед выполнением хранимой процедуры SQL Server генерирует для нее план исполнения, выполняет ее оптимизацию и компиляцию);
- поддержка модульного программирования (позволяют разбивать большие задачи на самостоятельные, более мелкие и удобные в управлении части);
- могут вызывать другие хранимые процедуры и функции;
- могут быть вызваны из прикладных программ других типов;
- выполняются быстрее, чем последовательность отдельных операторов;
- уменьшает размер запроса.
Типы хранимых процедур
Существуют несколько типов хранимых процедур.
- Системные хранимые процедуры предназначены для выполнения различных административных действий.
Устно. Можно сказать, что системные хранимые процедуры являются интерфейсом, обеспечивающим работу с системными таблицами, которая, в конечном счете, сводится к изменению, добавлению, удалению и выборке данных из системных таблиц как пользовательских, так и системных баз данных. Системные хранимые процедуры имеют префикс sp_, хранятся в системной базе данных и могут быть вызваны в контексте любой другой базы данных.
|
- Пользовательские хранимые процедуры реализуют действия пользователя. Каждая хранимая процедура располагается в конкретной БД, где и выполняется.
- Временные хранимые процедуры существуют определенное время в зависимости от типа процедуры. Локальные временные хранимые процедуры могут быть вызваны только из того соединения, в котором созданы. При создании такой процедуры ей необходимо дать имя, начинающееся с одного символа #. Хранимые процедуры этого типа автоматически удаляются при отключении пользователя, перезапуске или остановке сервера. Глобальные временные хранимые процедуры доступны для любых соединений сервера, на котором имеется такая же процедура. Для ее определения необходимо, чтобы имя начиналось с символов ##. Удаляются эти процедуры при перезапуске или остановке сервера, а также при закрытии соединения, в контексте которого они были созданы.
7. ТАБЛИЧНЫЕ ПЕРЕМЕННЫЕ
Основное использование типа table – временное хранилище для набора строк, которые возвращаются как результирующий набор табличнозначной функции.
Объявление
При объявлении переменной переменная table инициализируется как пустая таблица. Если выполняется оператор SELECT сразу после объявления табличной переменной, то результатом будет пустой набор строк.
Не допускается присвоение одной табличной переменной другой.
Не допускается создание индексов на табличных переменных за исключением индексов, которые создаются ограничениями PRIMARY KEY и UNIQUE.
ФУНКЦИИ ПОЛЬЗОВАТЕЛЯ
Функция пользователя (UDF) представляет собой модуль Transact-SQL, который принимает один или более входных аргументов и рассчитывает возвращаемое значение.
UDF может содержать как операторы управления ходом выполнения программы, так и операторы DML.