SQL邮件------数据库邮件

时间:2011-02-04 21:53:34

标签: sql sql-server-2008

亲爱的, 我正在使用SQL Server 2008。

我面临的情况是我必须根据查询向单个或多个用户发送邮件。我试过这个stmt向多个收件人发送邮件

EXEC msdb.dbo.sp_send_dbmail 
@profile_name = 'imran' , 
@recipients= 'imran.khan@bbraun.com;amol.puranik@bbraun.com', 
@subject = 'Test mail'

成功发送邮件。

现在我想根据查询发送邮件。对于单一员工而言,这不是问题,但如果它超过一名员工,我该如何邮寄给多个收件人。

我的问题是在此sp中发送多个收件人,必须将地址与;分开。如何安排收件人,以便;介于两者之间。

谢谢。

3 个答案:

答案 0 :(得分:2)

不幸的是,你没有给我们很多东西 - 你没有向我们展示选择你的员工的问题,你没有告诉我们Employee表的样子,所以我们所能做的就是猜测 - 充其量。

所以这是我的猜测:你想以某种方式选择多个员工,他们的电子邮件地址应该连接在一起,用分号(;)分隔,然后用于你的sp_send_dbmail电话

执行此操作的一种方法可能是:

DECLARE @recipients VARCHAR(4000)

SELECT 
   @recipients = STUFF((SELECT ';' + EMail 
                        FROM dbo.Employees
                        WHERE (some condition here to find the right employees)
                        FOR XML PATH('')
                       ), 1, 1, '')

EXEC msdb.dbo.sp_send_dbmail 
        @profile_name = 'imran', 
        @recipients, 
        @subject = 'Test mail'

答案 1 :(得分:0)

使用这样的函数 -

CREATE FUNCTION coltocsv
(
    --your input parameters 
)
RETURNS nvarchar(3000)
AS
BEGIN
      -- Declare the return variable here
declare @keywords nvarchar(3000) 

--Build your csv string of keywords
Select @keywords = null
SELECT @Keywords = Coalesce(@Keywords + '; ', '') +
ColumnName
from Table
where <some condition>

--- Return the result of the function
      RETURN @keywords
END

答案 2 :(得分:0)

对于收件人,您可以按[]分隔多个电子邮件ID;

declare  @ccmailid varchar(2000);

select @ccmailid = stuff((select '],['+ mailid  from table_name
                    order by '],['+ mailid
                    for xml path('')),1,2,'')+']'

EXEC msdb.dbo.sp_send_dbmail 
@profile_name = 'imran' , 
@recipients=  @ccmailid, 
@subject = 'Test mail'