Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
f50
Member

Откуда: Россия
Сообщений: 453
Доброе утро!
такое дело:

CREATE TABLE a1 (f1 int)		
GO
CREATE TABLE a2 (f2 int)		
GO
CREATE TRIGGER [dbo].[Tr_a1_I] ON [dbo].[a1]
FOR INSERT
AS
 DECLARE @f1 int
 SELECT @f1=f1 FROM inserted
 BEGIN
    WAITFOR DELAY '00:00:05';
	raiserror 50001 'Ok!'
 END
GO

INSERT INTO a1 VALUES (1)
INSERT INTO a2 VALUES (1)


По коду - сначала идет raiserror, затем вставка в таблицы:
автор
Сообщение 50001, уровень 16, состояние 1, процедура Tr_a1_I, строка 8
Ok!

(строк обработано: 1)
(строк обработано: 1)


Как выкрутится, и сделать так:
автор
(строк обработано: 1) - Вставка в таблицу a2 прошла
Сообщение 50001, уровень 16, состояние 1, процедура Tr_a1_I, строка 8
Ok!

(строк обработано: 1) - Вставка в таблицу a1 прошла, с паузой в 5 сек
30 май 13, 08:52    [14367968]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
+
f50
Доброе утро!
такое дело:

CREATE TABLE a1 (f1 int)		
GO
CREATE TABLE a2 (f2 int)		
GO
CREATE TRIGGER [dbo].[Tr_a1_I] ON [dbo].[a1]
FOR INSERT
AS
 DECLARE @f1 int
 SELECT @f1=f1 FROM inserted
 BEGIN
    WAITFOR DELAY '00:00:05';
	raiserror 50001 'Ok!'
 END
GO

INSERT INTO a1 VALUES (1)
INSERT INTO a2 VALUES (1)


По коду - сначала идет raiserror, затем вставка в таблицы:
автор
Сообщение 50001, уровень 16, состояние 1, процедура Tr_a1_I, строка 8
Ok!

(строк обработано: 1)
(строк обработано: 1)


Как выкрутится, и сделать так:
автор
(строк обработано: 1) - Вставка в таблицу a2 прошла
Сообщение 50001, уровень 16, состояние 1, процедура Tr_a1_I, строка 8
Ok!

(строк обработано: 1) - Вставка в таблицу a1 прошла, с паузой в 5 сек


Добрый день. Я наверное Вас не очень понял, но у вас триггер на таблице 1. А вы хотите сообщение показывать после вставки в таблицу 2? Тогда триггер на таблице 2 сделайте. При вставке в таблицу 2 триггер таблицы 1 ну никак работать не будет. И ещё вопрос:
 DECLARE @f1 int
SELECT @f1=f1 FROM inserted 

Поясните, пожалуйста, это зачем действие? Вы же нигде не используете переменную @f1
30 май 13, 08:58    [14367982]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
aleks2
Guest
Никак.
Пока триггер не отработает - вставка в таблицу "не произведена".

Рази тока так?
CREATE TABLE a1 (f1 int)		
GO
CREATE TABLE a2 (f2 int)		
GO
CREATE TRIGGER [dbo].[Tr_a1_I] ON [dbo].[a1]
FOR INSERT
AS
 DECLARE @f1 int
 SELECT @f1=f1 FROM inserted
GO

INSERT INTO a1 VALUES (1)
if @@error = 0
 BEGIN
    WAITFOR DELAY '00:00:05';
	raiserror 50001 'Ok!'
 END
INSERT INTO a2 VALUES (1)
30 май 13, 08:58    [14367983]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
aleks2
Никак.
Пока триггер не отработает - вставка в таблицу "не произведена".

Рази тока так?
CREATE TABLE a1 (f1 int)		
GO
CREATE TABLE a2 (f2 int)		
GO
CREATE TRIGGER [dbo].[Tr_a1_I] ON [dbo].[a1]
FOR INSERT
AS
 DECLARE @f1 int
 SELECT @f1=f1 FROM inserted
GO

INSERT INTO a1 VALUES (1)
if @@error = 0
 BEGIN
    WAITFOR DELAY '00:00:05';
	raiserror 50001 'Ok!'
 END
INSERT INTO a2 VALUES (1)

А смысл тогда здесь вообще использовать триггер?:)
30 май 13, 09:00    [14367992]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
f50
Member

Откуда: Россия
Сообщений: 453
2 инсерта рядом идут, из одного приложения. По разным подключениям к MSSQL их не разнести. Записи в a2 - дочерние от а1.. Т.е. пока не запишутся записи в а1 не могу с выдержкой паузы сослатся на дочерние в а2...
30 май 13, 09:00    [14367993]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
f50
Member

Откуда: Россия
Сообщений: 453
Сергей Викт.
Добрый день. Я наверное Вас не очень понял, но у вас триггер на таблице 1. А вы хотите сообщение показывать после вставки в таблицу 2? Тогда триггер на таблице 2 сделайте. При вставке в таблицу 2 триггер таблицы 1 ну никак работать не будет.


Спасибо за ответы!
Поясню, в таблицу а1 пишутся некие события, а в таблицу а2 пишутся параметры этих событий. На таблице а2 тригер вешать никак не могу, ибо события не знаю.
Как только пишется событие в а1, тут же пишутся параметры в а2. А мне требуется создать сообщение (почтовое, тут всё нормально отработано:) ) где есть данные о событии + параметре.


Сергей Викт.
Поясните, пожалуйста, это зачем действие?

Да, моя ошибка, не всё вырезал для наглядности.
30 май 13, 09:06    [14368016]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
f50
Member

Откуда: Россия
Сообщений: 453
Ещё поясню... 2 таблицы это как..... есть сообщение с метеостанции №1005 (запись в таблицу а1), с параметрами температуры, влажности, ветра и т.п. (запись в таблицу а2).
При определенном событии+параметре+значении - выполнить действие. но оно не выполняется, не могу сразу все 3 параметра собрать в тригере а1 для обработки...
И надо как бы в идеале... триггер на 2 таблицы...
30 май 13, 09:10    [14368033]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
f50
Спасибо за ответы!
Поясню, в таблицу а1 пишутся некие события, а в таблицу а2 пишутся параметры этих событий. На таблице а2 тригер вешать никак не могу, ибо события не знаю.
Как только пишется событие в а1, тут же пишутся параметры в а2. А мне требуется создать сообщение (почтовое, тут всё нормально отработано:) ) где есть данные о событии + параметре.


Так сделайте на таблице 2 триггер. После вставки параметров пускай идёт в табличку 1 и по событию (номеру или ID) берёт само событие, формирует текст письма и отправляет его.
30 май 13, 09:11    [14368035]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
aleks2
Guest
f50
Поясню, в таблицу а1 пишутся некие события, а в таблицу а2 пишутся параметры этих событий. На таблице а2 тригер вешать никак не могу, ибо события не знаю.
Как только пишется событие в а1, тут же пишутся параметры в а2. А мне требуется создать сообщение (почтовое, тут всё нормально отработано:) ) где есть данные о событии + параметре.


Ты свой бред сам то читаешь? Или чукча - писатель?
30 май 13, 09:12    [14368044]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
f50
Ещё поясню... 2 таблицы это как..... есть сообщение с метеостанции №1005 (запись в таблицу а1), с параметрами температуры, влажности, ветра и т.п. (запись в таблицу а2).
При определенном событии+параметре+значении - выполнить действие. но оно не выполняется, не могу сразу все 3 параметра собрать в тригере а1 для обработки...
И надо как бы в идеале... триггер на 2 таблицы...


CREATE TRIGGER tr2 ON table2
AFTER INSERT
AS
BEGIN
DECLARE @param int, @znachenie int,@sobitie int
SELECT @param=i.parametr,@znachenie=i.znachenie,@sobitie=t1.sobitie from inserted i
INNER JOIN table1 t1 ON i.ID=t1.ID

/*Здесь делаете проверку */

/*Далее отправляете письмо*/
END

Что-то вроде этого вам надо, мне кажется
30 май 13, 09:14    [14368061]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
f50
Member

Откуда: Россия
Сообщений: 453
Сергей Викт.
Так сделайте на таблице 2 триггер. После вставки параметров пускай идёт в табличку 1 и по событию (номеру или ID) берёт само событие, формирует текст письма и отправляет его.

Логично, я изначально думал не делать так, ибо страбатываний тригера на а2 будет на 1000 раз больше чем на а1. Я и подумал, что не есть хорошо. Всё, переборол, спасибо Сергей Викторович!
aleks2
Ты свой бред сам то читаешь? Или чукча - писатель?

Алекс не ругайся, лучше авторизируйся :) Старался рассказать ситуацию, вроде по погоде передал верно картину.
30 май 13, 09:18    [14368076]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
f50
Логично, я изначально думал не делать так, ибо страбатываний тригера на а2 будет на 1000 раз больше чем на а1. Я и подумал, что не есть хорошо. Всё, переборол, спасибо Сергей Викторович!
.

Почему срабатываний будет больше? Или у вас а1 и а2 связаны как один-ко-многим?
30 май 13, 09:22    [14368095]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
Glory
Member

Откуда:
Сообщений: 104760
f50
Логично, я изначально думал не делать так, ибо страбатываний тригера на а2 будет на 1000 раз больше чем на а1.

Ну так если это 1000 "событий", то какая разница ?
30 май 13, 09:22    [14368102]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
f50
Member

Откуда: Россия
Сообщений: 453
Сергей Викт.
Почему срабатываний будет больше? Или у вас а1 и а2 связаны как один-ко-многим?

Да, один ко многим. В а2 в разы больше информации идёт, расшифровка соего события (пришла весточка с метеостанции такой то...)
Я и подумал, зачем параметры то отслеживать, если вот оно, нужное событие (нужная метеостанция пришла!), а запустить через WAITFOR, думал дочерние записи уже лягут, и я их спокойно считаю.

Glory
Ну так если это 1000 "событий", то какая разница ?

да даже и не знаю, думаю одно меньше чем 1000, и будет меньше нагрузка на сервер.
30 май 13, 09:41    [14368178]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
Glory
Member

Откуда:
Сообщений: 104760
f50
да даже и не знаю, думаю одно меньше чем 1000, и будет меньше нагрузка на сервер.

Вы определитесь уже, когда же вы хотите "создать сообщение, где есть данные о событии + параметре."
Параметра без события не может быть. Или у вас может ?
30 май 13, 09:44    [14368190]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
f50
Сергей Викт.
Почему срабатываний будет больше? Или у вас а1 и а2 связаны как один-ко-многим?

Да, один ко многим. В а2 в разы больше информации идёт, расшифровка соего события (пришла весточка с метеостанции такой то...)
Я и подумал, зачем параметры то отслеживать, если вот оно, нужное событие (нужная метеостанция пришла!), а запустить через WAITFOR, думал дочерние записи уже лягут, и я их спокойно считаю.

Т.е. у вас в таблице 1 есть например событие 111 (одна запись), а в таблице 2 есть несколько записей к событию 111?
Или у вас запись тоже одна, но параметры разнесены по столбцам?
30 май 13, 09:45    [14368195]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
f50
По коду - сначала идет raiserror, затем вставка в таблицы:
автор
Сообщение 50001, уровень 16, состояние 1, процедура Tr_a1_I, строка 8
Ok!

(строк обработано: 1)
(строк обработано: 1)
Не надо путать понятия возврат сообщения клиенту и "вставка в таблицу".
Вставка таблицы происходит до триггеров.
Сообщение о вставке приходит после окончания всех триггеров.
30 май 13, 10:02    [14368289]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
aleks2
Guest
Mnior
Вставка таблицы происходит до триггеров.
Сообщение о вставке приходит после окончания всех триггеров.

Ща ты разрушишь и так некрепкие мозги.
30 май 13, 10:06    [14368299]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
автор
На таблице а2 тригер вешать никак не могу
Можна.
30 май 13, 10:11    [14368318]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
aleks2
Guest
f50
Ещё поясню... 2 таблицы это как..... есть сообщение с метеостанции №1005 (запись в таблицу а1), с параметрами температуры, влажности, ветра и т.п. (запись в таблицу а2).
При определенном событии+параметре+значении - выполнить действие. но оно не выполняется, не могу сразу все 3 параметра собрать в тригере а1 для обработки...
И надо как бы в идеале... триггер на 2 таблицы...


Фторой раз мне писать лениво.
14367911
30 май 13, 10:12    [14368327]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
aleks2,
Ок, ссори что встрял в разговор.
30 май 13, 10:13    [14368331]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Mnior
автор
На таблице а2 тригер вешать никак не могу
Можна.
Имел ввиду можно повесить "триггер" на две таблицы.
Но aleks2 уже это давно толдычит.
30 май 13, 10:16    [14368344]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
invm
Member

Откуда: Москва
Сообщений: 9413
f50
Как только пишется событие в а1, тут же пишутся параметры в а2. А мне требуется создать сообщение (почтовое, тут всё нормально отработано:) ) где есть данные о событии + параметре.
Сообщение надо отправлять асинхронно. Реализовать можно разными способами.
30 май 13, 10:40    [14368484]     Ответить | Цитировать Сообщить модератору
 Re: 2 таблицы, 1 тригер, 2 INSERTа, а между insert WAITFOR... (код)  [new]
f50
Member

Откуда: Россия
Сообщений: 453
[quot invm]
f50
Сообщение надо отправлять асинхронно. Реализовать можно разными способами.

Да, уже сделал асинхронно, запуском джоба, + триггер на 2й таблице, всё как надо получилось и работает, всех благодарю!
30 май 13, 11:48    [14369014]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить