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

Откуда: Гондурас
Сообщений: 1025
Уважаемый форум!

Следующая хрень: в триггере каким-то образом ограничивается длина переменной @body, хотя в доке написано, что она nvarchar(MAX). Просьба рассмотреть следующий код и по возможности сказать, чего не хватает или что неправильно:
...
DECLARE @imid as bigint, @comm varchar(MAX), @msg nvarchar(MAX), @msg1 nvarchar(MAX), @part varchar(30), @usrn varchar(25), @dec_before varchar(25), 
@dec_after varchar(25), @mpno varchar(11)
IF UPDATE(insp_Shipping)
BEGIN
	SET NOCOUNT ON;
	IF (SELECT insp_Shipping FROM Deleted)<>'' and (SELECT insp_Shipping FROM Deleted) is not null
	BEGIN
		Set @msg=''
		Set @msg1=''
		Set @usrn=(SELECT usr_Name FROM DIM_Users WHERE(usr_Login=@usrn))
		Set @imid=(SELECT IMID FROM Deleted WHERE(insp_Shipping<>'' and insp_Shipping is not null))
		Set @mpno=(SELECT insp_MOPI_No FROM Inserted WHERE(IMID=@imid))
		Set @part=(SELECT insp_ShipmentNo FROM Inserted WHERE(IMID=@imid))
		Set @comm=(SELECT insp_Dec_Change_Comment FROM Inserted WHERE(IMID=@imid))
		Set @dec_before=(SELECT insp_Shipping FROM Deleted WHERE(IMID=@imid))
		Set @dec_after=(SELECT insp_Shipping FROM Inserted WHERE(IMID=@imid))
		Set @msg='Shipping decision is changed for : ' + @mpno + ', ' + @part + '.'
		Set @msg1=CAST('Decision changed from ' + @dec_before + ' to ' + @dec_after + char(13) + char(13) + 'Reason: ' + @comm + '' as nvarchar(MAX))
		EXEC msdb.dbo.sp_send_dbmail
			@profile_name = 'DB',
			@recipients = 'pupkin@contora.com',
			@importance ='High',
			@subject = @msg,
			@body = @msg1;
END


Спасибо заранее!
3 фев 14, 19:01    [15512443]     Ответить | Цитировать Сообщить модератору
 Re: Размер @body в sp_send_dbmail  [new]
Glory
Member

Откуда:
Сообщений: 104760
IFK
в триггере каким-то образом ограничивается длина переменной @body

И как это вами установлено ?
3 фев 14, 22:41    [15513210]     Ответить | Цитировать Сообщить модератору
 Re: Размер @body в sp_send_dbmail  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 1025
Glory
IFK
в триггере каким-то образом ограничивается длина переменной @body

И как это вами установлено ?


Очень просто: при добавлении еще одной переменной тело письма остается пустым. Предел в 4000 обещанных символа в любом случае не достигается - от силы 100-200 символов.

В том виде, который приведен, все работает. Как только я добавляю одну строковую переменную @usrn длиной 25 символов - тело письма пустое. :(
4 фев 14, 14:36    [15516662]     Ответить | Цитировать Сообщить модератору
 Re: Размер @body в sp_send_dbmail  [new]
Glory
Member

Откуда:
Сообщений: 104760
IFK
Очень просто: при добавлении еще одной переменной тело письма остается пустым. Предел в 4000 обещанных символа в любом случае не достигается - от силы 100-200 символов.

А причем тут @body, если в него лишь присваивается значение вашей переменной @msg1 ?
Как вы логировали, что вы записали в эту переменную @msg1 ?
4 фев 14, 14:41    [15516703]     Ответить | Цитировать Сообщить модератору
 Re: Размер @body в sp_send_dbmail  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 1025
Glory
IFK
Очень просто: при добавлении еще одной переменной тело письма остается пустым. Предел в 4000 обещанных символа в любом случае не достигается - от силы 100-200 символов.

А причем тут @body, если в него лишь присваивается значение вашей переменной @msg1 ?
Как вы логировали, что вы записали в эту переменную @msg1 ?


Никак не логировал. Просто сравнил два варианта, один без доп. переменной и один с ней. Был еще один вариант, когда просто длина строкой константы увеличивалась и эффект был тот же, что и с дополнительной переменной, отсюда делал вывод, что проблема в длине получающейся строки. :(
4 фев 14, 15:18    [15517094]     Ответить | Цитировать Сообщить модератору
 Re: Размер @body в sp_send_dbmail  [new]
Glory
Member

Откуда:
Сообщений: 104760
IFK
Никак не логировал.

Круто.
На досуге попробуйте конкатенировать текстовые константы с переменными (max). И посмотрите, какой тип данных вы получаете в результате.
4 фев 14, 15:31    [15517202]     Ответить | Цитировать Сообщить модератору
 Re: Размер @body в sp_send_dbmail  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 1025
Glory
IFK
Никак не логировал.

Круто.
На досуге попробуйте конкатенировать текстовые константы с переменными (max). И посмотрите, какой тип данных вы получаете в результате.


Хорошо. А теперь можно поподробнее, что я делаю не так? Вам это может и очевидные вещи, а мне, к сожалению, пока не совсем очевидно. Не сочтите за труд. Спасибо! :)
4 фев 14, 15:33    [15517221]     Ответить | Цитировать Сообщить модератору
 Re: Размер @body в sp_send_dbmail  [new]
Glory
Member

Откуда:
Сообщений: 104760
IFK
А теперь можно поподробнее, что я делаю не так?

Почему вы решили, что результатом, ну например, varchar(50)+varchar(max) будет varchar(max) ??
4 фев 14, 15:39    [15517288]     Ответить | Цитировать Сообщить модератору
 Re: Размер @body в sp_send_dbmail  [new]
o-o
Guest
IFK,
по-моему у Вас вот это
Set @usrn=(SELECT usr_Name FROM DIM_Users WHERE(usr_Login=@usrn))

возвращает NULL, ну и все @msg1 превращается в NULL.
Вы ж объявили выше @usrn varchar(25) и никак его не инициализировали.
4 фев 14, 15:55    [15517406]     Ответить | Цитировать Сообщить модератору
 Re: Размер @body в sp_send_dbmail  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 1025
Glory
IFK
А теперь можно поподробнее, что я делаю не так?

Почему вы решили, что результатом, ну например, varchar(50)+varchar(max) будет varchar(max) ??


Потому что я его записываю в переменную varchar(max) с принудительным CAST(... as varchar (max)). Нет?
4 фев 14, 16:49    [15517915]     Ответить | Цитировать Сообщить модератору
 Re: Размер @body в sp_send_dbmail  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 1025
o-o
IFK,
по-моему у Вас вот это
Set @usrn=(SELECT usr_Name FROM DIM_Users WHERE(usr_Login=@usrn))

возвращает NULL, ну и все @msg1 превращается в NULL.
Вы ж объявили выше @usrn varchar(25) и никак его не инициализировали.


Ах ты ж ежик! Точно, случайно удалил строку инициализации. СПАСИБО!
4 фев 14, 16:52    [15517938]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить