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