powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Изменения в нескольких таблицах
7 сообщений из 7, страница 1 из 1
Изменения в нескольких таблицах
    #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
Изменения в нескольких таблицах
    #40026882
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как мне помнится, триггер привязан к своей таблице, поэтому пишите по триггеру на каждую
...
Рейтинг: 0 / 0
Изменения в нескольких таблицах
    #40026891
Pallich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
londinium,

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

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

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

Можете помочь, как это сделать?
Поле то я добавлю, а как тригер такой сделать?
...
Рейтинг: 0 / 0
Изменения в нескольких таблицах
    #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
Изменения в нескольких таблицах
    #40027094
Pallich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
londinium,

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


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