Архив / Процедуры-MSSQLServer
.pdfПроцедуры
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