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

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

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

Процедуры

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