Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Архив / Процедуры-MSSQLServer

.pdf
Скачиваний:
44
Добавлен:
14.05.2015
Размер:
278 Кб
Скачать
☆

Процедуры

MS SQL Server

описание команды

CREATE PROCEDURE <имя> [@<параметр> <тип> [OUTPUT ], ...]

AS

[DECLARE @<переменная> <тип>, ...] BEGIN

<операторы> END

EXECUTE <имя> [@<параметр> [OUTPUT ], ...]

процедура возвращает суммарный объем поставок детали

CREATE PROCEDURE prDetailSum @id INT, @n INT OUTPUT AS

Begin

SET @n = 0

SET @n = ( SELECT sum(n) FROM dp WHERE id_d=@id ) End

Триггеры

•Триггер вызывается для операций обновления данных

•Триггер имеет условие, при истинности которого выполняется триггер

–проверяется условие, триггер выполняется, затем осуществляется переход к следующему триггеру

–проверяются сразу все условия, затем выполняются только те триггеры, для которых условие истинно

•Существует две стратегии вызова триггера:

–немедленная

•вызов триггера до выполнения действий

•вызов триггера после выполнения действий

•вызов триггера вместо выполнения действий

–отложенная

•События рассматриваются на двух уровнях:

–вызов триггера для каждой записи

–вызов триггера для всей таблицы один раз

Описание команды

CREATE TRIGGER <имя триггера> ON <имя таблицы>

{AFTER | INSTEAD OF }

{[INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } AS

<определение переменных> Begin

<тело триггера> End

если зарплата оказалась увеличенной более чем на 5%, то это исправляется, и зарплата увеличивается ровно на 5% от предыдущей зарплаты

CREATE TRIGGER tgrEmployeeSalaryUpdate ON University.dbo.tblEmployee AFTER UPDATE AS

DECLARE @Salary_old float, @Salary_new float, @Id int; BEGIN

Select @Salary_old = fltSalary from Deleted

Select @Salary_new = fltSalary, @Id = intEmployeeId from Inserted IF (@Salary_new - @Salary_old > 0.05 * @Salary_old)

UPDATE tblEmployee SET fltSalary = 1.05 * @Salary_old WHERE intEmployeeId = @Id

END

tblEmployee

intEmpId

txtEmpName

fltSalary

…

 

 

 

 

1023

Бобров А.А.

10000

…

 

 

 

 

1025

Мухина В.Н.

12000

…

 

 

 

 

1026

Лобов А.Г.

14000

…

 

 

 

 

Update tblEmployee Set fltSalary=12000 Where intEmpId=1023

tblEmployee

intEmpId

txtEmpName

fltSalary

…

 

 

 

 

1023

Бобров А.А.

10000

…

 

 

 

 

1025

Мухина В.Н.

12000

…

 

 

 

 

1026

Лобов А.Г.

14000

…

 

 

 

 

Update tblEmployee Set fltSalary=12000 Where intEmpId=1023

Deleted

intEmpId

txtEmpName

fltSalary

…

 

 

 

 

1023

Бобров А.А.

10000

…

 

 

 

 

Inserted

 

 

 

 

 

 

 

intEmpId

txtEmpName

fltSalary

…

 

 

 

 

1023

Бобров А.А.

12000

…

 

 

 

 

tblEmployee

intEmpId

txtEmpName

fltSalary

…

 

 

 

 

1023

Бобров А.А.

12000

…

 

 

 

 

1025

Мухина В.Н.

12000

…

 

 

 

 

1026

Лобов А.Г.

14000

…

 

 

 

 

Update tblEmployee Set fltSalary=12000 Where intEmpId=1023 tgrEmployeeSalaryUpdate

Deleted

1023

Бобров А.А.

10000

…

 

 

 

 

 

Inserted

1023

Бобров А.А.

12000

…

UPDATE tblEmployee SET fltSalary = 1.05 * @Salary_old

WHERE intEmployeeId = @Id