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

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

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

tblEmployee

intEmpId

txtEmpName

fltSalary

 

 

 

 

1023

Бобров А.А.

10500

 

 

 

 

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

tgrEmployeeSalaryUpdate

Deleted

1023

Бобров А.А.

12000

 

 

 

 

 

Inserted

1023

Бобров А.А.

10500

tblDetail

id_d

dname

 

 

color

weight

city

total

 

 

 

 

 

 

 

 

 

 

1

 

винт

 

красный

12

Москва

300

2

 

болт

 

зеленый

17

СПб

200

 

 

 

 

 

 

 

 

 

 

3

 

гайка

 

синий

17

Тула

300

 

 

 

 

 

 

 

 

 

 

5

 

шайба

 

синий

12

СПб

600

6

 

гвоздь

 

красный

19

Москва

0

 

 

 

 

 

 

 

 

 

 

tblDelivery

 

 

 

 

 

 

 

 

 

 

 

 

 

 

id_p

 

id_d

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

1

 

100

 

 

 

 

3

 

2

 

200

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

1

 

200

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

5

 

400

 

 

 

 

4

 

5

 

200

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

3

 

300

 

 

 

 

Триггер записывает в таблицу tblDetail суммарное количество деталей после внесения изменений в таблицу tblDelivery

CREATE TRIGGER tgr_delivery_update ON tblDelivery AFTER UPDATE

AS

Declare @nn int, @id int BEGIN

SELECT @id=id_d FROM DELETED EXECUTE prDetailSum @id, @nn OUTPUT

UPDATE tblDetail SET total=@nn WHERE id_d=@id END

tblDetail

id_d

dname

 

 

color

weight

city

total

 

 

 

 

 

 

 

 

 

 

1

 

винт

 

красный

12

Москва

300

2

 

болт

 

зеленый

17

СПб

200

 

 

 

 

 

 

 

 

 

 

3

 

гайка

 

синий

17

Тула

300

 

 

 

 

 

 

 

 

 

 

5

 

шайба

 

синий

12

СПб

600

6

 

гвоздь

 

красный

19

Москва

0

 

 

 

 

 

 

 

 

 

 

tblDelivery

 

 

 

 

 

 

 

 

 

 

 

 

 

 

id_p

 

id_d

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

1

 

100

 

 

 

 

3

 

2

 

200

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

1

 

200

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

5

 

400

 

 

 

 

4

 

5

 

200

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

3

 

300

 

 

 

 

UPDATE tblDelivery SET n=30 WHERE (id_d=1) AND (id_p=4)

tblDetail

id_d

dname

 

 

color

weight

city

total

 

 

 

 

 

 

 

 

 

 

1

 

винт

 

красный

12

Москва

300

2

 

болт

 

зеленый

17

СПб

200

 

 

 

 

 

 

 

 

 

 

3

 

гайка

 

синий

17

Тула

300

 

 

 

 

 

 

 

 

 

 

5

 

шайба

 

синий

12

СПб

600

6

 

гвоздь

 

красный

19

Москва

0

 

 

 

 

 

 

 

 

 

 

tblDelivery

 

 

 

 

 

 

 

 

 

 

 

 

 

 

id_p

 

id_d

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

1

 

100

 

 

 

 

3

 

2

 

200

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

1

 

30

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

5

 

400

 

 

 

 

4

 

5

 

200

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

3

 

300

 

 

 

 

UPDATE tblDelivery SET n=30 WHERE (id_d=1) AND (id_p=4)

tblDetail

id_d

dname

 

 

color

weight

city

total

 

 

 

 

 

 

 

 

 

 

1

 

винт

 

красный

12

Москва

130

2

 

болт

 

зеленый

17

СПб

200

 

 

 

 

 

 

 

 

 

 

3

 

гайка

 

синий

17

Тула

300

 

 

 

 

 

 

 

 

 

 

5

 

шайба

 

синий

12

СПб

600

6

 

гвоздь

 

красный

19

Москва

0

 

 

 

 

 

 

 

 

 

 

tblDelivery

 

 

 

 

 

 

 

 

 

 

 

 

 

 

id_p

 

id_d

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

1

 

100

 

 

 

 

3

 

2

 

200

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

1

 

30

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

5

 

400

 

 

 

 

4

 

5

 

200

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

3

 

300

 

 

 

 

UPDATE tblDelivery SET n=30 WHERE (id_d=1) AND (id_p=4)

Обновление нескольких строк

UPDATE tblDelivery SET n=30 WHERE id_p=4

Обновление нескольких строк

CREATE TRIGGER tgr_delivery_update ON tblDelivery AFTER INSERT, UPDATE

AS

DECLARE @id int, @nn int

DECLARE cur CURSOR FOR SELECT id_d FROM INSERTED BEGIN

OPEN cur

FETCH NEXT FROM cur INTO @id WHILE @@FETCH_STATUS = 0

BEGIN

EXECUTE prDetailSum @id, @nn OUTPUT UPDATE tblDetail SET total=@nn WHERE id_d=@id FETCH NEXT FROM cur INTO @id

END CLOSE cur

END

Команда Insert

INSERT INTO tblDelivery (id_d, id_p, n) VALUES(1, 1, 100)

Имитация работы автоинкрементного поля

CREATE TRIGGER tgr_detail_insert ON tblDetail INSTEAD OF INSERT

AS

DECLARE @id int, @w real, @c char(20), @cl char(10), @n char(20)

BEGIN

SELECT @n=dname, @w=weight, @c=city, @cl=color FROM INSERTED

SELECT @id = max(id_d) FROM tblDetail SET @id=@id+1

INSERT INTO d (id_d, dname, weight, city, color, total) VALUES(@id, @n, @w, @c, @cl, 0)

END