Документ Microsoft Word (2)
.docxОтчет к 4 лабораторной работе
Цель: создать триггеры и хранимые процедуры для текущей базы данных
Триггер — это хранимая процедура особого типа, вызываемая на выполнение в ответ на определенные события.
В отличие от хранимых процедур, при использовании которых требуется их явный вызов на выполнение, триггеры вызываются на выполнение автоматически при обнаружении события (или событий), связанного с выполнением операций над таблицей, за которой закреплен триггер, например после слов UPDATE, INSERT, DELETE.
Хранимая процедура представляет собой оформленный особым образом пакет, который хранится в базе данных. Хранимые процедуры отличаются от пакетов тем, что в них допускается использование входных и выходных параметров, а также возвращаемых значений
В качестве главной таблицы я выбрал таблицу Salary_Key, в качестве подчинённой таблицы – Salary_Citizen
Триггеры:
ALTER TRIGGER [dbo].[Salary_Del]
ON [dbo].[Salary_Citizen]
AFTER DELETE
AS BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
UPDATE Salary_Key SET NORR=NORR-1 WHERE ID_Зарплата in (select ID_Зарплата FROM deleted)
END
ALTER TRIGGER [dbo].[Salary_Ins]
ON [dbo].[Salary_Citizen]
AFTER INSERT
AS BEGIN
--SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
UPDATE Salary_Key SET NORR=NORR+1 WHERE ID_Зарплата in (select ID_Зарплата FROM inserted)
END
ALTER TRIGGER [dbo].[Salary_Upd]
ON [dbo].[Salary_Citizen]
AFTER UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
UPDATE Salary_Key SET NORR=NORR+1 WHERE ID_Зарплата in (select ID_Зарплата FROM inserted)
UPDATE Salary_Key SET NORR=NORR-1 WHERE ID_Зарплата in (select ID_Зарплата FROM deleted)
END
Хранимые процедуры:
ALTER proc [dbo].[pSalary_Citizen]
@ID_Житель int,
@ID_Зарплата int
as begin
set nocount on;
insert into Salary_Citizen(ID_Житель,ID_Зарплата)
values(@ID_Житель, @ID_Зарплата)
update Salary_Key set NORR=NORR+1 where ID_Зарплата=@ID_Зарплата
end
ALTER proc [dbo].[pSalary_Citizen1]
@ID_Житель int,
@ID_Зарплата int
as begin
set nocount on;
update Salary_Key set NORR=NORR-1 where ID_Зарплата=@ID_Зарплата
DELETE FROM Salary_Citizen WHERE (ID_Житель=@ID_Житель and ID_Зарплата=@ID_Зарплата)
end