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

Откуда:
Сообщений: 9
Добрый день.
Помогите пожалуйста понять что не так, в скрипте.

DECLARE @db_name nvarchar(100), @fname nvarchar(100), @fid int, @recipients nvarchar(100),
  @min_id int =	(SELECT MIN(fid) FROM dblist WHERE activeflg = 1 
											   AND Country = 'RUS'
											   AND fid NOT IN (SELECT fid FROM dbo.mailing_status
															   WHERE SendDate = CAST(GETDATE() as date)
															     AND Country = 'RUS'
																 AND RepName = 'ServiceLvL')), 
  @max_id int =	(SELECT MAX(fid) FROM dblist WHERE activeflg = 1 and Country = 'RUS')
  
SET @db_name  = (SELECT Name FROM dblist WHERE activeflg = 1     and Country = 'RUS' and fid = @min_id)
SET @fname	  = (SELECT fname FROM dblist WHERE activeflg = 1    and Country = 'RUS' and fid = @min_id)
SET @fid	  = (SELECT fid FROM dblist WHERE activeflg = 1      and Country = 'RUS' and fid = @min_id)
SET @recipients = (SELECT c.DOM_mail FROM Contactlist c JOIN dblist d ON c.Country=d.Country
				   AND c.fid=d.fid AND d.activeflg=1 AND d.name = '' + @db_name + '' WHERE c.DOM_mail <> 'null')
WHILE @min_id <= @max_id AND @min_id in (SELECT fid FROM dblist WHERE activeflg = 1 and Country = 'RUS')
	BEGIN
	SET @db_name=(SELECT Name FROM dblist WHERE activeflg = 1     and Country = 'RUS' and fid = @min_id)
		EXECUTE('EXEC [ftphbc.cdc.ru].[Distr_Plus].[dbo].[DS_ServiceLvL] '+@db_name+'');
		EXECUTE('IF (SELECT COUNT(*) FROM [ftphbc.cdc.ru].[Distr_Plus].[dbo].[SRVCLvL_' + @db_name + '])>0 and '''+ @recipients +''' <> ''null''
				 EXEC xp_cmdShell ''BCP "SELECT * FROM [FTPHBC.CDC.RU].[Distr_Plus].[dbo].[SRVCLvL_Headers] UNION ALL SELECT [Distrib],[HQ],[NetLoc],[Client],CAST(mfID as nvarchar(50)),[orNumber],[naklNumber],[Category],[Brand],CAST([EAN] as nvarchar(50)),[SKU],CAST([ordrs_amnt] as nvarchar(50)),CAST([nakl_amnt] as nvarchar(50)),CAST([preResult] as nvarchar(50)),CAST([Result] as nvarchar(50)) FROM [FTPHBC.CDC.RU].[Distr_Plus].[dbo].[SRVCLvL_' + @db_name + ']" queryout C:\Transfer\DS_ServiceLevel\' + @db_name + '.csv -T -c -t ";" -C Win1251''
				 EXEC msdb.dbo.sp_send_dbmail 
					@recipients = '''+ @recipients +''',
					@subject = N''Уровень сервиса дистрибьютора '+ @fname +''',
					@body = N''Данное письмо сформировано автоматически и содержит в себе результат расчета уровня сервиса дистрибьютора.'',
					@body_format = ''HTML'',
					@file_attachments =''C:\Transfer\DS_ServiceLevel\' + @db_name + '.csv'',
					--@copy_recipients =''xxx'',
					@profile_name = ''Report_Mail''
				 IF (SELECT COUNT(*) FROM [ftphbc.cdc.ru].[Distr_Plus].[dbo].[SRVCLvL_' + @db_name + '])>0 AND
				 ' + @recipients + ' <> null		
				 INSERT INTO dbo.mailing_status SELECT CAST(GETDATE() as date),''RUS'','+@fid+',''ServiceLvL'',1
				 ELSE
				 INSERT INTO dbo.mailing_status SELECT CAST(GETDATE() as date),''RUS'','+@fid+',''ServiceLvL'',0
				')				 				
		SET @min_id=(SELECT MIN(fid) FROM dblist WHERE activeflg = 1 AND Country = 'RUS' AND fid NOT IN (SELECT fid FROM dbo.mailing_status
																										 WHERE SendDate = CAST(GETDATE() as date) 
																										   AND Country = 'RUS'
																										   AND RepName = 'ServiceLvL'))
		SET @fname =(SELECT fname FROM dblist WHERE activeflg = 1    AND Country = 'RUS' and fid = @min_id)
		SET @fid   =(SELECT fid FROM dblist WHERE activeflg = 1      AND Country = 'RUS' and fid = @min_id)
		SET @recipients = (SELECT c.DOM_mail FROM Contactlist c JOIN dblist d ON c.Country=d.Country
				   AND c.fid=d.fid AND d.activeflg=1 AND d.name = '' + @db_name + '' WHERE c.DOM_mail <> 'null')
	END


Скрипт выполняет процедуру, далее экспортирует данные в .csv, и после этого выбирает адресата из таблицы контактов и отправляет отчет на почту.
Но если не статично прописать ему адрес, он почему то ругается
(17583 row(s) affected)

(15514 row(s) affected)

(17607 row(s) affected)

(17607 row(s) affected)

(1 row(s) affected)
Msg 4104, Level 16, State 1, Line 12
The multi-part identifier "xxx@xxx.com" could not be bound.

Подскажите пожалуйста где тут ошибка...
22 янв 18, 22:01    [21128363]     Ответить | Цитировать Сообщить модератору
 Re: Рассылка эл. писем с выборкой адресов из таблицы  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1172
DaichiRyuu,

Вы принтом выведите вашу команду и посмотрите как она выглядит.

IF (SELECT COUNT(*) FROM [ftphbc.cdc.ru].[Distr_Plus].[dbo].[SRVCLvL_' + @db_name + '])>0 AND
				 ' + @recipients + ' <> null	
тут у вас ошибка
22 янв 18, 22:10    [21128377]     Ответить | Цитировать Сообщить модератору
 Re: Рассылка эл. писем с выборкой адресов из таблицы  [new]
DaichiRyuu
Member

Откуда:
Сообщений: 9
Если честно,я не совсем понял в чем там ошибка. не могли бы пояснить. Заранее спасибо.
22 янв 18, 22:15    [21128389]     Ответить | Цитировать Сообщить модератору
 Re: Рассылка эл. писем с выборкой адресов из таблицы  [new]
DaichiRyuu
Member

Откуда:
Сообщений: 9
Всё, понял, кавычки забыл дополнительные, спасибо большое за помощь.
22 янв 18, 22:19    [21128404]     Ответить | Цитировать Сообщить модератору
 Re: Рассылка эл. писем с выборкой адресов из таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 46952
DaichiRyuu
Всё, понял, кавычки забыл дополнительные, спасибо большое за помощь.
А кто вас научил писать "<> NULL"?
Вот это ошибка так ошибка!
23 янв 18, 09:58    [21129137]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить