Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Триггеры.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
53 Кб
Скачать
☆

3. В нашем случае триггер будет выглядеть следующим образом:

 

CREATE TRIGGER PRIMER3

   ON SOTRYDNIK

   AFTER update

AS

BEGIN

    SET NOCOUNT ON;

IF (SELECT OKLAD FROM INSERTED)<0

PRINT'НЕЛЬЗЯ ВСТАВЛЯТЬ ЗАПИСЬ С ОТРИЦАТЕЛЬНЫМ ОКЛАДОМ'

ROLLBACK

END

4. Выполняем триггер, нажав на кнопку 

 

на панели инструментов. В результате в нижней части экрана мы увидим строчку «Command(s) completedsuccessfully».

5. Далее сохраняем триггер, щелкнув по кнопке Save

6. Чтобы протестировать новый триггер, необходимо создать запрос, нажав на кнопку New Query  , следующего содержания

 

USE LUDI

UPDATE SOTRYDNIK

SET OKLAD=’-12000’

WHERE FAM=’Петров’

 

 

Выполняем запрос, щелкнув по кнопке  , в нижней части окна увидим сообщение об ошибке:

Сотрудник не должен иметь отрицательный оклад

 

 

Итак, данный триггер UPDATEзапрещает вставлять запись о сотруднике с отрицательным окладом.

 

Часто возникают ситуации, когда обновление большинства столбцов не интересует, но существует один столбец , который нельзя изменять ни в коем случае.

 

пример: допустим, у нас есть таблица «Sotrydnik» БД “Ludi”. Необходимо запретить изменять столбец, содержащий номер телефона.

 

1. Открыть SQL Server Management Studio. В окне Object ExplorerразвернутьпапкуБД «Ludi” - Programmability – Triggers.

2. Щелкаем правой кнопкой мыши на папке Triggersи выбираем командуNewTriggers.

3. В нашем случае триггер будет выглядеть следующим образом:

 

CREATE TRIGGER primer4

   ON sotrydnik

   AFTER UPDATE

AS

BEGIN

         SET NOCOUNT ON;

IFUPDATE(Telefon)

PRINT'Нельзя изменять телефонный номер сотрудника'

ROLLBACK

END

GO

4. Выполняем триггер, нажав на кнопку   на панели инструментов. В результате в нижней части экрана мы увидим строчку «Command(s)completedsuccessfully».

5. Далее сохраняем триггер, щелкнув по кнопке Save

6. Чтобы протестировать новый триггер, необходимо создать запрос, нажав на кнопку New Query  , следующего содержания

 

USE LUDI

UPDATE SOTRYDNIK

SET Tab_nom='89152369897'

WHERE FAM='Петров'

Выполняем запрос, щелкнув по кнопке , в нижней части окна увидим сообщение об ошибке:

Нельзя изменять номер телефона сотрудника.

 

 

Триггеры instead of

 

Часто возникает ситуация, когда в представлении отображаются не все столбцы, а вставить запись нужно во все столбцы. Обычные триггеры не позволят этого сделать, а вот триггер INSTEADOF позволяет.

 

пример: допустим, у нас есть таблица «Sotrydnik» БД “Ludi”. Необходимо создать представление, которое не будет отображать номер телефона сотрудника.

 

1. Создадим запрос, нажав на кнопку New Query  следующего содержания

 

USE SOTRYDNIK

GO

CREATE VIEW PHX_SOTRYDNIK

SELECT Tab_nom,Fam,Name, Otch

FROM SOTRYDNIK

 

2. Чтобы удостовериться, что это представление отображает все столбцы, кроме столбца с номером телефона, создадим запрос, нажав на кнопку New Query  следующего содержания

 

USE LUDI

SELECT * FROM PHX_SOTRYDNIK

3. Выполняем запрос, щелкнув по кнопке  , в нижней части окна увидим таблицу, содержащую все столбцы кроме столбца «Телефон».

 

4. Попытаемся вставить через представление данные нового сотрудника. Для этого создадим запрос, нажав на кнопку New Query  ,

следующего содержания:

 

USE LUDI

INSERT PHX_SOTRYDNIK

VALUES (‘S40’,’Иванов’,’Алексей’,’Юрьевич’,’33000’,’89152367896’)

 

5. Выполняем запрос, щелкнув по кнопке  , в нижней части окна увидим сообщение об ошибке.

 

Итак, создадим триггер, позволяющий вставлять строку, содержащую всю информацию в данном представлении  PHX_SOTRYDNIK.

1. Открыть SQL Server Management Studio. В окне Object ExplorerразвернутьпапкуБД «Ludi” - Programmability – Triggers.

2. Щелкаем правой кнопкой мыши на папке Triggersи выбираем командуNewTriggers.