将电子邮件发送给存储在表中的每个收件人

时间:2017-02-20 21:52:38

标签: sql sql-server tsql email

我正在尝试使用sql server电子邮件选项发送电子邮件,我已经可以发送电子邮件,但现在我正在尝试将该电子邮件发送给动态收件人,例如......我有下表:

  

ID |电子邮件
  ..1 | example@example.com
  ..2 | example2@example.com

使用我的代码我需要做以下事情:

@recipients = 'example@example.com; example2@example.com;'

我想要做的是从表格中选择那些电子邮件,所以如果我编辑一封电子邮件,我就不必更改我的代码,只需更新我的表格中的信息。

我想也许可以通过使用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...)

这可能吗?或者我可以尝试另一种解决方案吗?

3 个答案:

答案 0 :(得分:1)

收件人可以选择在同一行中添加多个电子邮件,因此解决问题的更简单方法是选择所有电子邮件,然后用;分隔加入它们。如果您认为这是一个不错的选择,您应该尝试以下代码:

Declare @Emails nvarchar(MAX)

Select @Emails = coalesce(@Emails + ';', '') + Email from yourTable
//Your output should be: example@example.com;example2@example.com

然后你需要做的就是:

@recipients = @Emails

答案 1 :(得分:0)

你需要连接列中的字符串,所以这样的东西应该起作用:

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

INSERT INTO dbo.exampleTable VALUES (1,'a@a'),(2,'b@b')

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变量。

答案 2 :(得分: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+@cursorName+'; '
END