2017-02-20 8 views
0

Я пытаюсь отправить электронное письмо с помощью опции электронной почты сервера sql, я уже могу отправить электронное письмо, но теперь я пытаюсь отправить это письмо динамическим получателям, например ... У меня есть следующая таблица:Отправить письмо каждому получателю, хранящемуся в таблице

ID | Email
..1 | [email protected]
..2 | [email protected]

С моим кодом мне нужно сделать следующее вещь:

@recipients = '[email protected]; [email protected];' 

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

Я думаю, может сделать это с помощью Var, что-то вроде:

Declare @emails nvarchar(max) 
set @email = query 
then do something like a foreach (foreach email in @emails) or something like that (in T-SQL of course...) 

Возможно ли это? Или какое другое решение я могу попробовать?

ответ

0

Вам нужно сцепить строки в столбце, так что-то, как это должно работать:

CREATE TABLE dbo.exampleTable (
    id int, 
    email varchar(200) 
    ) 

INSERT INTO dbo.exampleTable VALUES (1,'[email protected]'),(2,'[email protected]') 

SELECT stuff((SELECT ';'+email 
       FROM dbo.exampleTable 
       FOR XML PATH(''), TYPE).value('.', 'varchar(max)') 
      ,1,1,'') 

Есть также некоторые другие способы сделать это: https://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/

В результате запроса вы строите или использование может использоваться для установки вашей переменной @email.

0

Вы должны использовать курсор для этого

DECLARE @email nvarchar(max) 
set @email = '' 
DECLARE @cursorName CURSOR FOR 
SELECT emailColumn FROM tableName 
OPEN @cursorName 

Затем вы используете цикл для конкатенации каждого сообщения электронной почты

FETCH NEXT FROM @cursorName INTO @email 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    set @email = @[email protected]+'; ' 
END 
1

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

Declare @Emails nvarchar(MAX) 

Select @Emails = coalesce(@Emails + ';', '') + Email from yourTable 
//Your output should be: [email protected];[email protected] 

Тогда все, что вам нужно сделать, это:

@recipients = @Emails 
Смежные вопросы