Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Изменения в нескольких таблицах / 7 сообщений из 7, страница 1 из 1
11.12.2020, 15:34
    #40026881
Pallich
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменения в нескольких таблицах
Всем добрый день.

Прошу помощи добрых людей. Помогите пожалуйста сделать тригер который бы "смотрел" несколько таблиц и если в этих таблицах были изменения в данных (либо добавление данных) - записывал об этом инфо в отдельную таблицу.

Например, есть две таблицы:
Tab1 (id_field1, field2, field3) и Tab2 (id_field4, field5, field6)

Если в каком либо поле происходят изменения данных, либо добавляются данные, инфо об этом должно падать в таблицу Результатов (в которую записывается дата изменения и по какому id было изменение).
Res_Tab (DateUpdate, id)

Помогите плз сделать нужный тригер.

Спасибо.

Microsoft SQL Server 2017 (RTM-GDR) (KB4505224) - 14.0.2027.2 (X64)
...
Рейтинг: 0 / 0
11.12.2020, 15:35
    #40026882
londinium
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменения в нескольких таблицах
как мне помнится, триггер привязан к своей таблице, поэтому пишите по триггеру на каждую
...
Рейтинг: 0 / 0
11.12.2020, 15:43
    #40026891
Pallich
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменения в нескольких таблицах
londinium,

А как потом собирать это все в одну таблицу?

Может не тригер решает эту задачу а что то другое?
...
Рейтинг: 0 / 0
11.12.2020, 15:52
    #40026902
londinium
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменения в нескольких таблицах
Pallich,
авторА как потом собирать это все в одну таблицу

добавьте в таблицу Res_Tab поле TableName,и каждый триггер будет туда писать имя своей таблицы
...
Рейтинг: 0 / 0
11.12.2020, 17:02
    #40026947
Pallich
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменения в нескольких таблицах
londinium,

Можете помочь, как это сделать?
Поле то я добавлю, а как тригер такой сделать?
...
Рейтинг: 0 / 0
11.12.2020, 17:32
    #40026966
londinium
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменения в нескольких таблицах
как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
use PROFIX
GO

DROP TRIGGER IF EXISTS TR_INSERT_TABLE_A;
DROP TRIGGER IF EXISTS TR_UPDATE_TABLE_A;

DROP TRIGGER IF EXISTS TR_INSERT_TABLE_B;
DROP TRIGGER IF EXISTS TR_UPDATE_TABLE_B;

DROP TABLE IF EXISTS TABLE_A;
DROP TABLE IF EXISTS TABLE_B;
DROP TABLE IF EXISTS RES_TABLE;

CREATE TABLE TABLE_A
(  
  ID TINYINT NOT NULL IDENTITY(1,1),
   CONSTRAINT PK_TABLE_A PRIMARY KEY(ID),
  FIELD2 VARCHAR(100)NOT NULL,
  FIELD3 VARCHAR(100)NOT NULL
) ;
CREATE TABLE TABLE_B
(
  ID TINYINT NOT NULL IDENTITY(1,1),
   CONSTRAINT PK_TABLE_B PRIMARY KEY(ID),
  FIELD5 VARCHAR(100)NOT NULL,
  FIELD6 VARCHAR(100)NOT NULL
    
);
CREATE TABLE RES_TABLE
(
  TABLE_NAME VARCHAR(100) NOT NULL,
  ID TINYINT NOT NULL,
  OPERATION VARCHAR(20)NOT NULL
)
GO
------------------------------------------------------------
CREATE TRIGGER TR_INSERT_TABLE_A
ON [dbo].[TABLE_A] AFTER INSERT
AS
 BEGIN
  SET NOCOUNT ON;
  INSERT [dbo].[RES_TABLE]([TABLE_NAME],[ID],[OPERATION])
   SELECT 'TABLE_A',I.ID,'INSERT'
    FROM INSERTED AS I
 END
GO

CREATE TRIGGER TR_UPDATE_TABLE_A
ON [dbo].[TABLE_A]AFTER UPDATE
AS
 BEGIN
  SET NOCOUNT ON;
  INSERT [dbo].[RES_TABLE]([TABLE_NAME],[ID],[OPERATION])
   SELECT 'TABLE_A',I.ID,'UPDATE'
    FROM inserted AS I
	JOIN DELETED AS D ON I.ID=D.ID
 END
GO
------------------------------------------------------
CREATE TRIGGER TR_INSERT_TABLE_B
ON [dbo].[TABLE_B] AFTER INSERT
AS
 BEGIN
  SET NOCOUNT ON;
  INSERT [dbo].[RES_TABLE]([TABLE_NAME],[ID],[OPERATION])
   SELECT 'TABLE_B',I.ID,'INSERT'
    FROM INSERTED AS I
 END
GO

CREATE TRIGGER TR_UPDATE_TABLE_B
ON [dbo].[TABLE_B]AFTER UPDATE
AS
 BEGIN
  SET NOCOUNT ON;
  INSERT [dbo].[RES_TABLE]([TABLE_NAME],[ID],[OPERATION])
   SELECT 'TABLE_B',I.ID,'UPDATE'
    FROM inserted AS I
	JOIN DELETED AS D ON I.ID=D.ID
 END
GO
--------------------------------------------------
INSERT [dbo].[TABLE_A]([FIELD2],[FIELD3])
VALUES('IVANOFF','IVAN'),('SIDOROFF','SIDOR');

INSERT [dbo].[TABLE_B]([FIELD5],[FIELD6])
VALUES('PETROFF','PETR'),('TRUMP','DONALD');

UPDATE [dbo].[TABLE_A]SET
  [FIELD2]='WASHINGTON'
  WHERE ID=2;

UPDATE [dbo].[TABLE_B] SET
 [FIELD5]='HAMILTON'
 WHERE ID=2;
...
Рейтинг: 0 / 0
12.12.2020, 02:40
    #40027094
Pallich
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменения в нескольких таблицах
londinium,

Большое вам спасибо!
Очень помогли.
Буду изучать.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Изменения в нескольких таблицах / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]