powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Trigger
4 сообщений из 4, страница 1 из 1
Trigger
    #39796132
yuri7811
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Всем день.

Подскажите пожалуйста с задачей. Есть две таблицы . На первую приходят данные в формате (0,1,2,3,4,5). Эти данные пересылаются на вторую таблицу но формат немножко меняется (1,2,3,5,4,6) соответственно. Но в первой таблице он должен сохранятся в формате (20000,50000,40000,50000,30000, 70000) соответственно.
На первую таблицу поставил два триггера (after inert, update).

Вроде все работает как надо.

Вопрос: правильно ли такое решение и не будут ли триггеры каждый раз обрабатывать все строчки таблицы заново?


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
ALTER TRIGGER [dbo].[Conveyor_Main_Triger_TEST]
ON [dbo].[Events_Conveyor_Main]
AFTER INSERT AS
 BEGIN

  set nocount on

  UPDATE Events_Conveyor_Main  SET
        Events_Conveyor_Main.Code = case 
		when (b.Code  = 0)  Then 20000
		when (b.Code  = 1)  Then 50000
		when (b.Code  = 2)  Then 40000
		when (b.Code  = 3)  Then 50000
		when (b.Code  = 4)  Then 30000
		when (b.Code  = 5)  Then 70000
    	end
    from Events_Conveyor_Main a
    inner join  inserted b on b.ID_Station = a.ID_Station and b.DateTimeComplect = a.DateTimeComplect

end




Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
ALTER TRIGGER [dbo].[Conveyor_Main_Triger]
    ON [dbo].[Events_Conveyor_Main]
    for update
    AS
    BEGIN

set nocount on

update a set
    a.Status_FromMachine_Auto = case
        when (b.code = 20000) then 1
        when (b.code = 50000) then 2
        when (b.code = 40000) then 3
	when (b.code = 60000) then 5
        when (b.code = 30000) then 4
	when (b.code = 70000) then 6
       
		 
    end
from        Station_Status  a
inner join  inserted b on b.ID_Station = a.Station_ID

end
...
Рейтинг: 0 / 0
Trigger
    #39797579
Фотография Deff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yuri7811,

1. Вы можете сделать один триггер, а не два.
2. Вы можете использовать в триггере команду print 'название триггера '+convert(varchar, @@nestlevel), чтобы протестировать в Management Studio .
3. Вы можете почитать про рекурсивные триггеры.
...
Рейтинг: 0 / 0
Trigger
    #39797628
monsenior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yuri7811Добрый Всем день.

Подскажите пожалуйста с задачей. Есть две таблицы . На первую приходят данные в формате (0,1,2,3,4,5). Эти данные пересылаются на вторую таблицу но формат немножко меняется (1,2,3,5,4,6) соответственно. Но в первой таблице он должен сохранятся в формате (20000,50000,40000,50000,30000, 70000) соответственно.
На первую таблицу поставил два триггера (after inert, update).

Вроде все работает как надо.

Вопрос: правильно ли такое решение и не будут ли триггеры каждый раз обрабатывать все строчки таблицы заново?


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
ALTER TRIGGER [dbo].[Conveyor_Main_Triger_TEST]
ON [dbo].[Events_Conveyor_Main]
AFTER INSERT AS
 BEGIN

  set nocount on

  UPDATE Events_Conveyor_Main  SET
        Events_Conveyor_Main.Code = case 
		when (b.Code  = 0)  Then 20000
		when (b.Code  = 1)  Then 50000
		when (b.Code  = 2)  Then 40000
		when (b.Code  = 3)  Then 50000
		when (b.Code  = 4)  Then 30000
		when (b.Code  = 5)  Then 70000
    	end
    from Events_Conveyor_Main a
    inner join  inserted b on b.ID_Station = a.ID_Station and b.DateTimeComplect = a.DateTimeComplect

end




Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
ALTER TRIGGER [dbo].[Conveyor_Main_Triger]
    ON [dbo].[Events_Conveyor_Main]
    for update
    AS
    BEGIN

set nocount on

update a set
    a.Status_FromMachine_Auto = case
        when (b.code = 20000) then 1
        when (b.code = 50000) then 2
        when (b.code = 40000) then 3
	when (b.code = 60000) then 5
        when (b.code = 30000) then 4
	when (b.code = 70000) then 6
       
		 
    end
from        Station_Status  a
inner join  inserted b on b.ID_Station = a.Station_ID

end



тут нужен один триггер INSTEAD OF в котором вы модифицируете входящие данные и потом записываете в основную
и дополнительную таблицу

схема будет примерно такая
Код: 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.
ALTER TRIGGER [dbo].[Conveyor_Main_Triger_TEST]
ON [dbo].[Events_Conveyor_Main]
INSTEAD OF UPDATE
AS

UPDATE Events_Conveyor_Main  SET
        Events_Conveyor_Main.Code = case 
		when (b.Code  = 0)  Then 20000
		when (b.Code  = 1)  Then 50000
		when (b.Code  = 2)  Then 40000
		when (b.Code  = 3)  Then 50000
		when (b.Code  = 4)  Then 30000
		when (b.Code  = 5)  Then 70000
    	end
    from Events_Conveyor_Main a
    inner join  inserted b on b.ID_Station = a.ID_Station and b.DateTimeComplect = a.DateTimeComplect
       
update a set
    a.Status_FromMachine_Auto = case
        when (b.code = 20000) then 1
        when (b.code = 50000) then 2
        when (b.code = 40000) then 3
	when (b.code = 60000) then 5
        when (b.code = 30000) then 4
	when (b.code = 70000) then 6
       
		 
    end
from        Station_Status  a
inner join  inserted b on b.ID_Station = a.Station_ID

GO
...
Рейтинг: 0 / 0
Trigger
    #39800654
yuri7811
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо всем. разобрался.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Trigger
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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