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

Откуда:
Сообщений: 31
Второй день бьюсь, не могу понять в чем прОблем...
Есть тригггер
CREATE TRIGGER SendMail
	ON dbo.Заявки
	FOR UPDATE
AS

IF UPDATE([Дата_прогноз])
BEGIN
	DECLARE @TO VARCHAR(4000),
		@CC VARCHAR(4000),
		@MESSAGE_TO  VARCHAR(4000),
		@MESSAGE_FROM  VARCHAR(4000),
		@Date1 VARCHAR(4000),
		@Date2 VARCHAR(4000),
		@OrderNum VARCHAR(4000),
		@PersonTO INT,
		@PersonCC INT

	SELECT @OrderNum=OrderNum, @Date1=[Дата_заявки], @Date2=[Дата_прогноз], @PersonTO=InitsiatorID, @PersonCC=ClientID
	FROM INSERTED

	SELECT @TO = [E-mail]
	FROM [ServerName1].PersonalSQL.dbo.Персонал
	WHERE PersonID=@PersonTO

	SELECT @CC = [E-mail]
	FROM [ServerName1].PersonalSQL.dbo.Персонал
	WHERE PersonID=@PersonCC
	
	SELECT @MESSAGE_TO=N'Уважемый пользователь! Ваша заявка от 
		'+ @Date1 + ' №'+ @OrderNum + ' взята в работу. 
		Пргноз исполнения '+ @Date2 +
                ' С уважением, Служба ИТ. 111-11-11'
	SELECT @MESSAGE_FROM= N'Уважемый пользователь! Ваша заявка от 
		'+ @Date1 + ' №'+ @OrderNum + ' взята в работу. 
		Пргноз исполнения '+ @Date2 +
                ' С уважением, Служба ИТ. 111-11-11
	
	EXEC spSendMail @TO, @CC, @MESSAGE_TO, @MESSAGE_FROM
END

в ответ получаю сообщение об ошибке

Another user has modified the contentsof this table or view; the database row you are modifying no longer exists in the database.
Database error:'[Microsoft][ODBC SQL Server Driver][SQL Server]MSDTC on server 'serverName' is unavailable'

Если параметры @TO и @CC указать явно
...
SELECT @CC =N'Mail@Mail.ru'
SELECT @TO= N'Mail_1@Mail.ru'
...
то все работет...
17 авг 04, 15:51    [887861]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите сбороть триггер!!!  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Во-первых, FAQ, во-вторых, триггер написан на обработку одной строки. А если будет изменено несколько? Переписать бы нада.
17 авг 04, 16:04    [887920]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите сбороть триггер!!!  [new]
злой шаман
Member

Откуда: Питер
Сообщений: 1253
Так как триггер выполняется в транзакции, то при обращении к другому серверу неявно открывается распределенная транзакция, а координатор у вас не запущен. Поэтому надо запустить сервисы MSDTC на обоих серверах. И прислушайтесь к совету tpg.
17 авг 04, 16:12    [887950]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите сбороть триггер!!!  [new]
SweetLana
Member

Откуда:
Сообщений: 31
tpg
Во-первых, FAQ,

не помогло...

tpg
во-вторых, триггер написан на обработку одной строки. А если будет изменено несколько? Переписать бы нада.


а тот, кот на обработку одной строки... там где тараканы? И если можно, где почитать про обработку нескольких строк?
17 авг 04, 16:19    [887995]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите сбороть триггер!!!  [new]
Glory
Member

Откуда:
Сообщений: 104760
а тот, кот на обработку одной строки... там где тараканы? И если можно, где почитать про обработку нескольких строк?
1. Inserted - это таблица.
Поэтому запрос
SELECT @OrderNum=OrderNum, @Date1=[Дата_заявки], @Date2=[Дата_прогноз], @PersonTO=InitsiatorID, @PersonCC=ClientID
FROM INSERTED
поместит в переменные данные только из одной записи таблицы. Причем последней записи

2. Если в Inserted нет ни одной записи то ваши переменные останутся со заначениями NULL. Что возможно объясняет феномен "Если параметры @TO и @CC указать явно то все работет..."
17 авг 04, 16:25    [888021]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите сбороть триггер!!!  [new]
SweetLana
Member

Откуда:
Сообщений: 31
Glory
а тот, кот на обработку одной строки... там где тараканы? И если можно, где почитать про обработку нескольких строк?
1. Inserted - это таблица.
Поэтому запрос
SELECT @OrderNum=OrderNum, @Date1=[Дата_заявки], @Date2=[Дата_прогноз], @PersonTO=InitsiatorID, @PersonCC=ClientID
FROM INSERTED
поместит в переменные данные только из одной записи таблицы. Причем последней записи

2. Если в Inserted нет ни одной записи то ваши переменные останутся со заначениями NULL. Что возможно объясняет феномен "Если параметры @TO и @CC указать явно то все работет..."


Но при этом все остальные параметры (@OrderNum,@Date...) определяются верно...
17 авг 04, 16:28    [888033]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите сбороть триггер!!!  [new]
SweetLana
Member

Откуда:
Сообщений: 31
to злой шаман
MSTDC запущен...
17 авг 04, 16:30    [888042]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите сбороть триггер!!!  [new]
Glory
Member

Откуда:
Сообщений: 104760
Но при этом все остальные параметры (@OrderNum,@Date...) определяются верно...
А вы это проверяли ? Особенно в случае возникновения ошибки ?
17 авг 04, 16:31    [888044]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите сбороть триггер!!!  [new]
SweetLana
Member

Откуда:
Сообщений: 31
Glory
Но при этом все остальные параметры (@OrderNum,@Date...) определяются верно...
А вы это проверяли ? Особенно в случае возникновения ошибки ?

...SELECT @MESSAGE_TO=N'Уважемый пользователь! Ваша заявка от 
		'+ @Date1 + ' №'+ @OrderNum + ' взята в работу. 
		Пргноз исполнения '+ @Date2 +
                ' С уважением, Служба ИТ. 111-11-11'
	SELECT @MESSAGE_FROM= N'Уважемый пользователь! Ваша заявка от 
		'+ @Date1 + ' №'+ @OrderNum + ' взята в работу. 
		Пргноз исполнения '+ @Date2 +
                ' С уважением, Служба ИТ. 111-11-11'
...

Параметры @MESSAGE_TO и @MESSAGE_СС формируются верно, значит и @Date1 и OrderNum тоже определяются...
17 авг 04, 16:38    [888070]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите сбороть триггер!!!  [new]
Glory
Member

Откуда:
Сообщений: 104760
Параметры @MESSAGE_TO и @MESSAGE_СС формируются верно, значит и @Date1 и OrderNum тоже определяются...
Еще раз спрошу - как(т.е. где и каким образом) вы проверяете какие именно значения присваиваются переменным @MESSAGE_TO и @MESSAGE_СС.
В общем случае и в случае возникновения ошибки в частности.
17 авг 04, 16:41    [888085]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите сбороть триггер!!!  [new]
Glory
Member

Откуда:
Сообщений: 104760
И что будет при выполнении запроса
UPDATE dbo.Заявки SET [Дата_прогноз] = GETDATE() WHERE 1=0
17 авг 04, 16:43    [888095]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите сбороть триггер!!!  [new]
SweetLana
Member

Откуда:
Сообщений: 31
(0 row(s) affected)
17 авг 04, 16:46    [888113]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите сбороть триггер!!!  [new]
SweetLana
Member

Откуда:
Сообщений: 31
Заработало! Всем спасибо!
Подскажите, pls, что нужно изменить чтобы при изменение нескольких записей триггер работал правильно? Где можно почитать про это?
17 авг 04, 17:06    [888216]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите сбороть триггер!!!  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Ну хоть курсорок завести для выборки из inserted таблички и то хлеб.
17 авг 04, 17:09    [888238]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите сбороть триггер!!!  [new]
Glory
Member

Откуда:
Сообщений: 104760
Заработало! Всем спасибо!
Само собой что ли ?

Подскажите, pls, что нужно изменить чтобы при изменение нескольких записей триггер работал правильно? Где можно почитать про это?
Достаточно помнить что inserted/deleted - это таблицы.

(0 row(s) affected)
Что и почта была отправлена ?
17 авг 04, 17:10    [888239]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите сбороть триггер!!!  [new]
SweetLana
Member

Откуда:
Сообщений: 31
[quot Glory]Заработало! Всем спасибо!
Само собой что ли ?
quot]

Перегрузка сервера...

Сорри за глупые вопросы, я только начинаю! Еще раз спасибо за помощь!
17 авг 04, 17:19    [888283]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить