Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
gang
Member

Откуда:
Сообщений: 1394
IFK,
И долго вы ждете пока это тоже самое появится?
10 янв 13, 14:13    [13747033]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
IFK,

У Вас SELECT ... INTO... Вы уверены, что объект создается в схеме dbo?
10 янв 13, 14:19    [13747082]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 1025
pkarklin
IFK,

У Вас SELECT ... INTO... Вы уверены, что объект создается в схеме dbo?


Угу. Создается - проверял. Таблица создается там, где нужно и содержит именно то, что нужно.
10 янв 13, 14:31    [13747190]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
invm
Member

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

Таблица tbl_Temp_Email создается в триггере, следовательно в транзакции, следовательно таблица недоступна другим сеансам. Процедура sp_send_dbmail выполняет запрос, переданный в @query в отдельном сеансе. Поэтому, этот самый запрос либо отвалится по таймауту, либо будет выполнятся вечно.
10 янв 13, 14:33    [13747205]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Покажите Ваш окончательный вариант.
10 янв 13, 14:34    [13747211]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
invm,

Ее просто уже нет, когда DBMail ассинхронно от потока, поставившего сообщение в очередь, отправялет ее.
10 янв 13, 14:36    [13747216]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
pkarklin
invm,

Ее просто уже нет, когда DBMail ассинхронно от потока, поставившего сообщение в очередь, отправялет ее.
Наверное так и есть, глубоко sp_send_dbmail не копал. Только тогда не ясно где ТС получает сообщение об ошибке...
10 янв 13, 14:50    [13747312]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 1025
pkarklin
Покажите Ваш окончательный вариант.


Окончательный вариант:
ALTER TRIGGER [dbo].[Trigger_DB5_Index] 
   ON  [dbo].[tbl_DB5]
   AFTER UPDATE
AS
	DECLARE @res varchar(max)
IF UPDATE(db5_Index)
BEGIN
	IF (SELECT db5_Index FROM Inserted)='2' or (SELECT db5_Index FROM Inserted)='3'
	BEGIN
		SET NOCOUNT ON;
		Set @res=(SELECT DBMID FROM Inserted)
		SELECT [fin_BAP],[fin_Crop],[mate_Origin],[mate_Type],[fin_Supplier],[mate_Description],[db5_Sample],[fin_MOPI_No],[db5_Case_No],[db5_Date_Eval_PD],[db5_Category],[db5_Position_PD],[db5_Index],[db5_Comment_PD],[db5_Remarks],[db5_Evaluated_By] INTO tbl_Temp_Email FROM View_DB5_FL WHERE(DBMID=@res)
		--SELECT @res=(SELECT * FROM tbl_Temp_Email)
		EXEC msdb.dbo.sp_send_dbmail
				@profile_name = 'test',
				@recipients = 'test@test.com;',
				@importance ='High',
				@subject = 'Index has been changed',
				@query='SELECT * FROM dbo.tbl_Temp_Email';
		DROP TABLE tbl_Temp_Email
	END
END

Сообщение об ошибке получаю сразу же по изменении значения в поле, на котором сидит триггер. Еще раз повторюсь, при прочих равных, если я опрашиваю только одно поле в запросе после @query, то все отрабатывает на ура - мыло отсылается со значением в этом одном поле. Почему возникает проблема с опросом нескольких полей - я не понимаю. :(
10 янв 13, 15:00    [13747392]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 1025
Вдогонку. Сообщение об ошибке: Error formating query, probably invalid parameters
10 янв 13, 15:02    [13747412]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
Glory
Member

Откуда:
Сообщений: 104760
IFK
Еще раз повторюсь, при прочих равных, если я опрашиваю только одно поле в запросе после @query, то все отрабатывает на ура - мыло отсылается со значением в этом одном поле. Почему возникает проблема с опросом нескольких полей - я не понимаю

Потому что в таблице куча BLOB полей ?
10 янв 13, 15:02    [13747414]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 1025
Glory
IFK
Еще раз повторюсь, при прочих равных, если я опрашиваю только одно поле в запросе после @query, то все отрабатывает на ура - мыло отсылается со значением в этом одном поле. Почему возникает проблема с опросом нескольких полей - я не понимаю

Потому что в таблице куча BLOB полей ?


Нет там никаких BLOB полей. :(
10 янв 13, 15:03    [13747426]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
IFK,

Давайте Вы опишите задачу, а не придуманный Вами способ ее решения.
10 янв 13, 15:05    [13747451]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
gang
Member

Откуда:
Сообщений: 1394
Она есть, но db_mail стучится к ней из отдельного потока через SQLCMD, как в принципе invm парой постов выше написал. Соответственно петля из блокировки получается. Судя по тому что ошибка таки вылазит SQLCMD вызывается с -tquerytime_out и отваливается раньше родительского вызова sp_send_dbmail. Отсюда и ошибка.
10 янв 13, 15:05    [13747453]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
Glory
Member

Откуда:
Сообщений: 104760
IFK
Нет там никаких BLOB полей. :(


Простой код, без всяких триггеров, работает ?

		EXEC msdb.dbo.sp_send_dbmail
				@profile_name = 'test',
				@recipients = 'test@test.com;',
				@importance ='High',
				@subject = 'Index has been changed',
				@query='SELECT TOP 1 [fin_BAP],[fin_Crop],[mate_Origin],[mate_Type],[fin_Supplier],[mate_Description],[db5_Sample],[fin_MOPI_No],[db5_Case_No],[db5_Date_Eval_PD],[db5_Category],[db5_Position_PD],[db5_Index],[db5_Comment_PD],[db5_Remarks],[db5_Evaluated_By] FROM View_DB5_FL ';
10 янв 13, 15:06    [13747460]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 1025
pkarklin
IFK,

Давайте Вы опишите задачу, а не придуманный Вами способ ее решения.


Ок. Задача: при изменении значения в поле Index в таблице Tbl отправить сообщение по мылу, содержащее информацию соответсвующей записи в таблице Tbl. Т.е. в записи 1 в таблице Tbl изменилось значение поля Index (ручной ввод пользователем нового значения). Необходимо отослать мыло с записью 1. Все.
10 янв 13, 15:15    [13747543]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
gang
Member

Откуда:
Сообщений: 1394
IFK
pkarklin
Покажите Ваш окончательный вариант.


Окончательный вариант:
+
ALTER TRIGGER [dbo].[Trigger_DB5_Index] 
   ON  [dbo].[tbl_DB5]
   AFTER UPDATE
AS
	DECLARE @res varchar(max)
IF UPDATE(db5_Index)
BEGIN
	IF (SELECT db5_Index FROM Inserted)='2' or (SELECT db5_Index FROM Inserted)='3'
	BEGIN
		SET NOCOUNT ON;
		Set @res=(SELECT DBMID FROM Inserted)
		SELECT [fin_BAP],[fin_Crop],[mate_Origin],[mate_Type],[fin_Supplier],[mate_Description],[db5_Sample],[fin_MOPI_No],[db5_Case_No],[db5_Date_Eval_PD],[db5_Category],[db5_Position_PD],[db5_Index],[db5_Comment_PD],[db5_Remarks],[db5_Evaluated_By] INTO tbl_Temp_Email FROM View_DB5_FL WHERE(DBMID=@res)
		--SELECT @res=(SELECT * FROM tbl_Temp_Email)
		EXEC msdb.dbo.sp_send_dbmail
				@profile_name = 'test',
				@recipients = 'test@test.com;',
				@importance ='High',
				@subject = 'Index has been changed',
				@query='SELECT * FROM dbo.tbl_Temp_Email';
		DROP TABLE tbl_Temp_Email
	END
END

Сообщение об ошибке получаю сразу же по изменении значения в поле, на котором сидит триггер. Еще раз повторюсь, при прочих равных, если я опрашиваю только одно поле в запросе после @query, то все отрабатывает на ура - мыло отсылается со значением в этом одном поле. Почему возникает проблема с опросом нескольких полей - я не понимаю. :(

Потому что то что вы называете "опросом одного поля" есть запись в переменную @res 1 значения 1 поля из таблицы inserted с последующей передачей в sp_send_dbmail этого значения. Тоже что вы называете "опросом нескольких полей" есть передача в sp_send_dbmail запроса к таблице которая находится либо вне зоны видимости sp_send_dbmail (inserted в исходном варианте) либо под блокировкой от родительской транзакции - транзакции ее заполнения в триггере (tbl_Temp_Email в последнем варианте).
10 янв 13, 15:15    [13747544]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
IFK
Задача: при изменении значения в поле Index в таблице Tbl отправить сообщение по мылу, содержащее информацию соответсвующей записи в таблице Tbl. Т.е. в записи 1 в таблице Tbl изменилось значение поля Index (ручной ввод пользователем нового значения). Необходимо отослать мыло с записью 1. Все.


Самое простое решение - в триггере только логгировать такие изменения в отдельную таблицу. Джобом с необходимой периодичностью отсылать информацию. Данны, по котором отправлены сообщения - удалять из этой таблицы.
10 янв 13, 15:23    [13747613]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
gang
Member

Откуда:
Сообщений: 1394
IFK,
Кстати Ваш окончательный вариант не виснет навечно, а продолжает возвращать ошибку потому что вы так и не указали полностью имя таблицы - пропущено имя Вашей пользовательской БД и sp_send_dbmail ищет dbo.tbl_Temp_Email в msdb.
10 янв 13, 15:23    [13747615]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 1025
gang
IFK,
Кстати Ваш окончательный вариант не виснет навечно, а продолжает возвращать ошибку потому что вы так и не указали полностью имя таблицы - пропущено имя Вашей пользовательской БД и sp_send_dbmail ищет dbo.tbl_Temp_Email в msdb.


Хорошо. Указание базы и схемы удалил. Объясните мне тогда разницу между вариантом, который работает (одно поле в запросе
SELECT field_1 FROM tbl_Temp_Email
) и неработающим запросом
SELECT * FROM tbl_Temp_Email
? Что, в первом случае блокировка не срабатывает?
10 янв 13, 16:07    [13748004]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 1025
pkarklin
IFK
Задача: при изменении значения в поле Index в таблице Tbl отправить сообщение по мылу, содержащее информацию соответсвующей записи в таблице Tbl. Т.е. в записи 1 в таблице Tbl изменилось значение поля Index (ручной ввод пользователем нового значения). Необходимо отослать мыло с записью 1. Все.


Самое простое решение - в триггере только логгировать такие изменения в отдельную таблицу. Джобом с необходимой периодичностью отсылать информацию. Данны, по котором отправлены сообщения - удалять из этой таблицы.


Не подходит. Нужно именно что отправлять мыло по факту изменения, а не вечером или через несколько часов. :(
10 янв 13, 16:08    [13748014]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
IFK
Не подходит. Нужно именно что отправлять мыло по факту изменения, а не вечером или через несколько часов. :(


Отправляйте каждую минуту.
10 янв 13, 16:14    [13748085]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
Гузы
Guest
IFK
Error formating query, probably invalid parameters. :(:(

Однако было бы любопытно еще и версию сервера узнать.
У меня такая ошибка появлялась на 2008 R2, причем в студии код отрабатывал, а при попытке выполнить его из джобы - вот эта самая ошибка.
Обошел формированием текстового сообщения.
10 янв 13, 16:17    [13748123]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 1025
Гузы
IFK
Error formating query, probably invalid parameters. :(:(

Однако было бы любопытно еще и версию сервера узнать.
У меня такая ошибка появлялась на 2008 R2, причем в студии код отрабатывал, а при попытке выполнить его из джобы - вот эта самая ошибка.
Обошел формированием текстового сообщения.


Угу. Microsoft SQL Server Standard Edition 2008, 10.0.4000.0
10 янв 13, 16:30    [13748272]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
gang
Member

Откуда:
Сообщений: 1394
IFK
gang
IFK,
Кстати Ваш окончательный вариант не виснет навечно, а продолжает возвращать ошибку потому что вы так и не указали полностью имя таблицы - пропущено имя Вашей пользовательской БД и sp_send_dbmail ищет dbo.tbl_Temp_Email в msdb.


Хорошо. Указание базы и схемы удалил. Объясните мне тогда разницу между вариантом, который работает (одно поле в запросе
SELECT field_1 FROM tbl_Temp_Email
) и неработающим запросом
SELECT * FROM tbl_Temp_Email
? Что, в первом случае блокировка не срабатывает?


Разницу между этими "вариантами" объяснять бесполезно, т.к. это не реально выполняемый код, а куски чего-то выдернутого откуда-то. Приведёте полный текст обоих триггеров - будет о чем говорить.
10 янв 13, 16:41    [13748393]     Ответить | Цитировать Сообщить модератору
 Re: Отправка мыла с сервера с результатами запроса в теле письма  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 1025
gang
IFK,
Кстати Ваш окончательный вариант не виснет навечно, а продолжает возвращать ошибку потому что вы так и не указали полностью имя таблицы - пропущено имя Вашей пользовательской БД и sp_send_dbmail ищет dbo.tbl_Temp_Email в msdb.


Хм. Вполне возможно, что Вы правы. Запустил кусок кода:
ALTER PROCEDURE [dbo].[test] 
AS
BEGIN
	SET NOCOUNT ON;
		--SELECT [fin_BAP],[fin_Crop],[mate_Origin],[mate_Type],[fin_Supplier],[mate_Description],[db5_Sample],[fin_MOPI_No],[db5_Case_No],[db5_Date_Eval_PD],[db5_Category],[db5_Position_PD],[db5_Index],[db5_Comment_PD],[db5_Remarks],[db5_Evaluated_By] INTO tbl_Temp_Email FROM View_DB5_FL WHERE(fin_MOPI_No='CA0007-12JT')
		--SELECT @res=(SELECT * FROM tbl_Temp_Email)
		EXEC msdb.dbo.sp_send_dbmail
				@profile_name = 'test',
				@recipients = 'test@test.com;',
				@importance ='High',
				@subject = 'Index has been changed',
				@query='SELECT * FROM tbl_Temp_Email';
END
с уже сформированной таблицей tbl_Temp_Email и получил в ответ:
Msg 22050, Level 16, State 1, Line 0
Error formatting query, probably invalid parameters
Msg 14661, Level 16, State 1, Procedure sp_send_dbmail, Line 504
Query execution failed: Msg 208, Level 16, State 1, Server GERTRI01-SRV-48, Line 1
Invalid object name 'tbl_Temp_Email'.


Как правильно задать полную схему и т.д.?
10 янв 13, 16:42    [13748397]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить