powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Рассылка эл. писем с выборкой адресов из таблицы
5 сообщений из 5, страница 1 из 1
Рассылка эл. писем с выборкой адресов из таблицы
    #39588710
DaichiRyuu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Помогите пожалуйста понять что не так, в скрипте.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
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, и после этого выбирает адресата из таблицы контактов и отправляет отчет на почту.
Но если не статично прописать ему адрес, он почему то ругается
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
(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.


Подскажите пожалуйста где тут ошибка...
...
Рейтинг: 0 / 0
Рассылка эл. писем с выборкой адресов из таблицы
    #39588716
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaichiRyuu,

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

Код: sql
1.
2.
IF (SELECT COUNT(*) FROM [ftphbc.cdc.ru].[Distr_Plus].[dbo].[SRVCLvL_' + @db_name + '])>0 AND
				 ' + @recipients + ' <> null	

тут у вас ошибка
...
Рейтинг: 0 / 0
Рассылка эл. писем с выборкой адресов из таблицы
    #39588717
DaichiRyuu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если честно,я не совсем понял в чем там ошибка. не могли бы пояснить. Заранее спасибо.
...
Рейтинг: 0 / 0
Рассылка эл. писем с выборкой адресов из таблицы
    #39588718
DaichiRyuu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё, понял, кавычки забыл дополнительные, спасибо большое за помощь.
...
Рейтинг: 0 / 0
Рассылка эл. писем с выборкой адресов из таблицы
    #39588887
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaichiRyuuВсё, понял, кавычки забыл дополнительные, спасибо большое за помощь.А кто вас научил писать "<> NULL"?
Вот это ошибка так ошибка!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Рассылка эл. писем с выборкой адресов из таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]