Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите новичку разобраться с триггером  [new]
Garrik_Igorek
Member

Откуда:
Сообщений: 3
Приветствую!!! Помогите пожалуйста с триггером.

Я занимаюсь c MS SQL около недели и нужда заставила, разбираться с триггерами.
Вопрос. Может ли триггер созданной на одной таблице выполнять манипуляции над другой?
Объясняю например в таблицу tsecurity в столбец OpenDoor приходит значение '1' , а триггер должен отработать и добавить в другую таблицу messages(название таблицы) в столбец mes_text текст 'Открыта дверь'

вот запрос как я думаю должен работать, но по второй таблице не отрабатывает.
Не понимаю в чем дело

CREATE TRIGGER trmessages
ON tsecurity
AFTER INSERT
AS BEGIN
IF @@ROWCOUNT = 1
return
INSERT INTO messages (mes_text, mes_type, object_name)
select TOP 1 'Открыта дверь' as mes_text, 1
as mes_type, 'D0005'
as object_name
from inserted
WHERE DoorOpen = 1

end
8 июл 16, 21:38    [19388344]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку разобраться с триггером  [new]
i-i
Guest
думаю проблема в @@ROWCOUNT = 1
8 июл 16, 21:54    [19388399]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку разобраться с триггером  [new]
Garrik_Igorek
Member

Откуда:
Сообщений: 3
вы правы, тоже попробовал без и заработало всё как нужно))) i-i,
8 июл 16, 22:01    [19388430]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку разобраться с триггером  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8839
Garrik_Igorek,

это делается не триггером, а процедурой на добавление записи. Триггером не слишком управляемо и прозрачно.
Соответственно, интерфейс должен вызывать процедуру. Так вы еще и обезопасите таблицы от прямого доступа (если настроите права для пользователей).
8 июл 16, 22:19    [19388484]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку разобраться с триггером  [new]
i-i
Guest
Владислав, позвольте не согласиться по пункту "управляемо" - чем оно не управлаемо? По поводу не прозрачно - да, иногда не удобно если бизнес логика построена на хранимих процедурах, а кто-то фикс сделал на паре тригеров. А вот если тригер колается из десятка разных мест, то удобнее все таки тригер, а не отдельная функция или процедура
8 июл 16, 22:41    [19388540]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку разобраться с триггером  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8839
i-i,

понятно, что мнений может быть много, но мой опыт показывает, что именно бизнес -операции разноски данных по таблицам лучше поручать процедурам. Запись в журнал изменений - другой вопрос, т.к. здесь действительно неизвестно - откуда придет изменение.
9 июл 16, 00:26    [19388909]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку разобраться с триггером  [new]
Игорь Н )
Member

Откуда:
Сообщений: 7
что такое бизнес операции?
11 июл 16, 22:28    [19397239]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку разобраться с триггером  [new]
JVF
Member [заблокирован]

Откуда: 87652
Сообщений: 630
Владислав Колосов
бизнес -операции разноски данных по таблицам лучше поручать процедурам.
Ага. Еще, желательно, на CLR.
11 июл 16, 22:41    [19397271]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку разобраться с триггером  [new]
Триггерман
Member

Откуда:
Сообщений: 113
JVF, Не надо перегибать,
сравнили тоже, ХП и CLR.
15 июл 16, 15:51    [19415114]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку разобраться с триггером  [new]
Триггерман
Member

Откуда:
Сообщений: 113
i-i
Владислав, позвольте не согласиться по пункту "управляемо" - чем оно не управлаемо? По поводу не прозрачно - да, иногда не удобно если бизнес логика построена на хранимих процедурах, а кто-то фикс сделал на паре тригеров. А вот если тригер колается из десятка разных мест, то удобнее все таки тригер, а не отдельная функция или процедура
Владислав как раз прав.
Ваша trigger-driven logic до добра не доведёт.
Использования триггеров следует избегать всеми средствами.
15 июл 16, 15:53    [19415125]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку разобраться с триггером  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Триггерман
i-i
Владислав, позвольте не согласиться по пункту "управляемо" - чем оно не управлаемо? По поводу не прозрачно - да, иногда не удобно если бизнес логика построена на хранимих процедурах, а кто-то фикс сделал на паре тригеров. А вот если тригер колается из десятка разных мест, то удобнее все таки тригер, а не отдельная функция или процедура
Владислав как раз прав.
Ваша trigger-driven logic до добра не доведёт.
Использования триггеров следует избегать всеми средствами.

новая секта избегателей триггеров? хоть пару слов для новичков в вашей секте скажете?
15 июл 16, 15:59    [19415166]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку разобраться с триггером  [new]
last resort,
Guest
TaPaK
Триггерман
пропущено...
Владислав как раз прав.
Ваша trigger-driven logic до добра не доведёт.
Использования триггеров следует избегать всеми средствами.

новая секта избегателей триггеров? хоть пару слов для новичков в вашей секте скажете?


Ознакомьтесь, коллега :)

Триггеры, динамические запросы, курсоры - это last resort. То есть применять их разумно только когда нет никакой другой возможности. Или когда плевать на быстродействие, поддерживаемость и сопровождаемость создаваемой системы - то есть когда хочешь подложить свинью тем кто будет поддерживать эту систему в будущем. Ну или если хочешь сделать заказчика своим постоянным клиентом и знаешь что он не пригласит специалиста сделать аудит написаной системе.
15 июл 16, 16:45    [19415431]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку разобраться с триггером  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
last resort,,

ОБС
15 июл 16, 16:47    [19415443]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку разобраться с триггером  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
TaPaK,

Не ввязывайтесь в очередной холивар. Как показывает практика, триггерофобов ничем не проймешь :)
15 июл 16, 17:17    [19415647]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку разобраться с триггером  [new]
o-o
Guest
Триггерман на поверю оказался Триггерфобом
15 июл 16, 17:50    [19415874]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку разобраться с триггером  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8839
Триггерофилов тоже не пронять :)
16 июл 16, 20:43    [19419363]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку разобраться с триггером  [new]
Garrik_Igorek
Member

Откуда:
Сообщений: 3
Что бы не создавать новую тему напишу здесь.

Вот триггер.

ALTER TRIGGER [dbo].[telmeterprob]
ON [dbo].[telmeter]
AFTER INSERT
AS
INSERT INTO messages (mes_text, mes_type, object_name, DT)
select TOP 1
'Значение напряжения выше порогового значения (' + CAST(i.MetUa as varchar(5)) + ')' as mes_text,
b.mes_type,
i.object_name,
i.DT
from inserted as i, (Select TOP 1 * from belmeter as bb where i.object_name = bb.object_name or bb.object_name is null order by bb.object_name) as b
WHERE
(i.MetUa > b.max_MetU or i.MetUa < b.min_MetU)
ORDER BY b.mes_type ASC

выдаёт следующую ошибку:
сообщение: 4104, уровень: 16, состояние: 1, процедура: telmeterprob, строка: 11 [строка начала пакета: 0]
The multi-part identifier "i.object_name" could not be bound.

Подскажите пожалуйста как исправить и помогите разобраться как во вложенный select добавить условие?
5 окт 16, 12:21    [19745618]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку разобраться с триггером  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8839
Garrik_Igorek,

belmeter есть такая таблица?
5 окт 16, 14:50    [19746459]     Ответить | Цитировать Сообщить модератору
 Re: Помогите новичку разобраться с триггером  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Владислав Колосов
Garrik_Igorek,

belmeter есть такая таблица?
В производной таблице неизвестен алиас i из этого же FROMа.
APPLY

Интересно, зачем там ORDER BY?
5 окт 16, 15:04    [19746546]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить