我正在尝试使用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...)
这可能吗?或者我可以尝试另一种解决方案吗?
答案 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