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

Откуда: Украина, Киев-Одесса
Сообщений: 182
select @query1 выполняется правильно

В результате запроса возникает ошибка:

Сообщение 22050, уровень 16, состояние 1, строка 0
Error formatting query, probably invalid parameters
Сообщение 14661, уровень 16, состояние 1, процедура sp_send_dbmail, строка 517
Ошибка выполнения запроса: Сообщение 102, уровень 15, состояние 1, сервер AKR\REPORT, строка 1
Неправильный синтаксис около конструкции "<".

Как можно "полечить" проблему? Вроде правильно..

use msdb
declare @date1 date = GETDATE()-3 

declare @lb1 int = '1'  -- АС

declare @tema_a nvarchar (300)
set @tema_a = N' Нет данных за'+' '+convert(nvarchar(12),@date1, 104)+' г.'

declare @t table (email Nvarchar(100), phone Nvarchar(100), дата Nvarchar(100))
insert into @t (email,phone,дата)

select s.[email],s.[Телефон],дата = @tema_a from  [Access_BD]...[Платежи] p
right join [Access_BD]...[ЦП]  c on p.[id_ЦП]=c.[Код]   and p.[Дата]=@date1
inner join [Access_BD]...[Сотрудники] s on c.[id_Сотрудник]=s.[Код] and c.[id_ЛБ] in ( @lb1)
where  p.[Код] is null and (c.[Код] not in (SELECT [ЦП] FROM [Access_BD]...[ЦП_вне_запроса_должники]))


--select * from @t
--select email+' - '+phone+' - '+дата from @t

declare @query1 nvarchar(max)
   set @query1 = 
       N'<table>' +
	   N'<caption>Должники</caption>' +
	   N'<tr><th>Email</th><th>Телефон</th><th>Дата</th></tr>'+
	   cast( (select  
	           td = email, '',
			   td = phone, '',  
			   td = дата, ''
		    from @t
			for xml path ('tr'), type) as nvarchar (max)) +
		N'</table>'
select @query1

exec sp_send_dbmail
@recipients =  'akr@a.ua',
@body_format = 'HTML',
@subject = N'Список для обзвона',
@body = N'1223' ,
@query =  @query1,
@query_no_truncate = 1;
17 июн 14, 18:36    [16177921]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
Glory
Member

Откуда:
Сообщений: 104751
googlogmob
Вроде правильно..

И "Неправильный синтаксис около конструкции "<"" особенно подчеркивает, что правильно
Особенно правильно в текст запроса пихать произвольную абракадабру
17 июн 14, 18:40    [16177938]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
_human
Member

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

попробуйте упростить таблицу

declare @query1 nvarchar(max)
   set @query1 = 
       N'<table>' +
	   N'<caption>Должники</caption>' +
	   N'<tr><th>Email</th><th>Телефон</th><th>Дата</th></tr>'+
	   cast( (select  
	           td = email, '',
			   td = phone, '',  
			   td = дата, ''
		    from @t
			for xml path ('tr'), type) as nvarchar (max)) +
		N'</table>'
select @query1


declare @query1 nvarchar(max)
   set @query1 = 
       N'<table>' +
	   N'<tr><td>Email</td><td>Телефон</td><td>Дата</td></tr>'+
	   cast( (select  
	           td = email, '',
			   td = phone, '',  
			   td = дата, ''
		    from @t
			for xml path ('tr'), type) as nvarchar (max)) +
		N'</table>'
select @query1
17 июн 14, 18:47    [16177962]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
_human
Member

Откуда:
Сообщений: 569
может там нужен именно XML ?
+

declare @query1 XML;
   set @query1 = 
      CONVERT(XML, 
       N'<table>' +
	   N'<tr><td>Email</td><td>Телефон</td><td>Дата</td></tr>'+
	   cast( (select  
	           td = 1, '',
			   td = 2, '',  
			   td = 3, ''
		    from sys.all_columns
			for xml path ('tr'), type) as nvarchar (max)) +
		N'</table>');
select @query1

17 июн 14, 18:51    [16177973]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
_human
googlogmob,

попробуйте упростить таблицу

declare @query1 nvarchar(max)
   set @query1 = 
       N'<table>' +
	   N'<caption>Должники</caption>' +
	   N'<tr><th>Email</th><th>Телефон</th><th>Дата</th></tr>'+
	   cast( (select  
	           td = email, '',
			   td = phone, '',  
			   td = дата, ''
		    from @t
			for xml path ('tr'), type) as nvarchar (max)) +
		N'</table>'
select @query1


declare @query1 nvarchar(max)
   set @query1 = 
       N'<table>' +
	   N'<tr><td>Email</td><td>Телефон</td><td>Дата</td></tr>'+
	   cast( (select  
	           td = email, '',
			   td = phone, '',  
			   td = дата, ''
		    from @t
			for xml path ('tr'), type) as nvarchar (max)) +
		N'</table>'
select @query1


Та же ошибка..
17 июн 14, 18:52    [16177977]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Glory
googlogmob
Вроде правильно..

И "Неправильный синтаксис около конструкции "<"" особенно подчеркивает, что правильно
Особенно правильно в текст запроса пихать произвольную абракадабру


Поэтому и "вроде"
В чем именно выражается произвольнуая абракадабра?
17 июн 14, 18:53    [16177979]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
Glory
Member

Откуда:
Сообщений: 104751
googlogmob
В чем именно выражается произвольнуая абракадабра?

В том, что вы засунули в @query1 произвольный текст и пытаетесь заствить sp_send_dbmail выполнить его как валидный запрос
17 июн 14, 18:55    [16177990]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
_human
Member

Откуда:
Сообщений: 569
googlogmob
абракадабра?

похоче там должен быть текст запроса типа select.. from ..
17 июн 14, 18:55    [16177992]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Правильно выполнился при
declare @query1 nvarchar(max)
  set @query1 = 
       N'<table>' +
	   N'<caption>Должники</caption>' +
	   N'<tr><th>Email</th><th>Телефон</th><th>Дата</th></tr>'+
	   cast( (select  
	           td = email, '',
			   td = phone, '',  
			   td = дата, ''
		    from @t
			for xml path ('tr'), type) as nvarchar (max)) +
		N'</table>'
select @query1

exec sp_send_dbmail
@recipients =  'akravchenko@alfaic.ua',
@body_format = 'HTML',
@subject = N'Список должников для обзвона',
@body = @query1;


Спасибо за помощь
17 июн 14, 18:57    [16178002]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Glory
googlogmob
В чем именно выражается произвольнуая абракадабра?

В том, что вы засунули в @query1 произвольный текст и пытаетесь заствить sp_send_dbmail выполнить его как валидный запрос


Тем не менее он выполнился правильно после исправление строки @body = @query1;
17 июн 14, 18:58    [16178012]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
Glory
Member

Откуда:
Сообщений: 104751
googlogmob
Тем не менее он выполнился правильно после исправление строки @body = @query1;

Если для вам все равно, что и в какой параметер вы предаете в процедуру, то самой процедуре совсем не все равно.
17 июн 14, 19:03    [16178029]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Glory
googlogmob
Тем не менее он выполнился правильно после исправление строки @body = @query1;

Если для вам все равно, что и в какой параметер вы предаете в процедуру, то самой процедуре совсем не все равно.


в чем ошибка такого изложения запроса?
17 июн 14, 19:08    [16178048]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
Glory
Member

Откуда:
Сообщений: 104751
googlogmob
в чем ошибка такого изложения запроса?

Откройте хелп по sp_send_dbmail и прочитайте про каждый из ее параметров
17 июн 14, 19:10    [16178055]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8819
Зачем Вы подсовываете сиквелу запрос в HTML формате?
17 июн 14, 19:10    [16178057]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Владислав Колосов
Зачем Вы подсовываете сиквелу запрос в HTML формате?


По другому не нашел как отправить в теле письма таблицу с результами запроса

При таком запросе отправляется текст "select email, phone, дата from @t" :


declare @query1 nvarchar(max)
  set @query1 = 
       
	   
	    'select  email, phone, дата
		    from @t'
		
--select @query1

exec sp_send_dbmail
@recipients =  'akravchenko@alfaic.ua',
@body_format = 'HTML',
@subject = N'Список должников для обзвона',
@body = @query1;


Может возможно переписать запрос, чтобы не использовать html?
17 июн 14, 21:28    [16178348]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
Glory
Member

Откуда:
Сообщений: 104751
googlogmob
Может возможно переписать запрос, чтобы не использовать html?

Начните с того, что у вас будет выполняться просто exec(@query1)
17 июн 14, 21:38    [16178363]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Glory
googlogmob
Может возможно переписать запрос, чтобы не использовать html?

Начните с того, что у вас будет выполняться просто exec(@query1)


На примере было бы намного проще и быстрее понять
Хотя бы схематически как должен выглядеть запрос?
17 июн 14, 22:44    [16178501]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
Glory
Member

Откуда:
Сообщений: 104751
googlogmob
Хотя бы схематически как должен выглядеть запрос?

Откуда я знаю, как должен выглядеть ваш запрос ?
17 июн 14, 22:58    [16178557]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Glory
googlogmob
Хотя бы схематически как должен выглядеть запрос?

Откуда я знаю, как должен выглядеть ваш запрос ?


свой запрос я напишу сам. Что вы имели ввиду "выполняться просто exec(@query1)"?
Создать хранимую процедуру с запроса select и ее выполнять в sp_send_dbmail?
17 июн 14, 23:25    [16178692]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
Glory
Member

Откуда:
Сообщений: 104751
googlogmob
Что вы имели ввиду "выполняться просто exec(@query1)"?

Мда.
Вы запускали exec(@query1) ?
17 июн 14, 23:38    [16178761]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Glory
googlogmob
Что вы имели ввиду "выполняться просто exec(@query1)"?

Мда.
Вы запускали exec(@query1) ?


Да.

К сообщению приложен файл. Размер - 45Kb
18 июн 14, 00:39    [16179016]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
Glory
Member

Откуда:
Сообщений: 104751
googlogmob
Да.

Картинка с другого сайта.

Что творит этот безумный пацан.
18 июн 14, 00:51    [16179081]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Glory
googlogmob
Да.

Картинка с другого сайта.

Что творит этот безумный пацан.

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

Если бы я знал решение задачи, то не спрашивал бы на форуме.

Могу вам сказать, что есть сферы дел, где вы для меня - "безумный пацан".
18 июн 14, 01:12    [16179166]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
Glory
Member

Откуда:
Сообщений: 104751
googlogmob
С такой вашей помощью понимания и знания не добавятся

И как вам помогать, если вы даже не в состоянии выполнить то, что вам говорят
Вам говоришь, добавь только exec(@query1), а вы от большого усердия еще отсебятины добавляете.
Не говоря уже о том, что вы даже по номеру строки в сообщении об ошибке не в состоянии увидеть, на какой строке кода происходит эта самая ошибка

googlogmob
Если бы я знал решение задачи, то не спрашивал бы на форуме.

Решение задачи состоит во внимательном чтении хелпа. Конкретно хелпа по процедуре sp_send_dbmail. И чоень конкретно про параметер @query. Может быть вас даже хватит на то, чтобы разобрать пример использования @query.

googlogmob
Могу вам сказать, что есть сферы дел, где вы для меня - "безумный пацан".

Ну так идите в эти сферы. Что вы тут то околачиваетесь ?

googlogmob
а ваши тупые насмешки в постах у многих пользователей - не очень адекватный признак.

ну так острые насмешки на умные вопросы дают, а вам - уж такие.
18 июн 14, 02:54    [16179362]     Ответить | Цитировать Сообщить модератору
 Re: sp_send_dbmail  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8819
googlogmob
Владислав Колосов
Зачем Вы подсовываете сиквелу запрос в HTML формате?


По другому не нашел как отправить в теле письма таблицу с результами запроса

При таком запросе отправляется текст "select email, phone, дата from @t" :


declare @query1 nvarchar(max)
  set @query1 = 
       
	   
	    'select  email, phone, дата
		    from @t'
		
--select @query1

exec sp_send_dbmail
@recipients =  'akravchenko@alfaic.ua',
@body_format = 'HTML',
@subject = N'Список должников для обзвона',
@body = @query1;


Может возможно переписать запрос, чтобы не использовать html?

Разумеется, отправляется текст. Но запрос-параметр отсутствует в этом выражении в отличие от предыдущего с ошибкой. Непонятно - Вы интуитивно программируете, без изучения справочных материалов, что ли?
18 июн 14, 11:11    [16180571]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить