Sql-Server

向多個收件人發送電子郵件

  • October 11, 2016

創建組或郵件列表不是一種選擇,這可能是不可能的,但我需要一種掃描EmailMe電子郵件地址並將其從那裡提取到電子郵件的方法。如果兩個電子郵件地址具有相同的 `vendorID **,**則應發送一封電子郵件而不是多個。下面是 DDL - 以此為例,紫色和綠色都應該是一封電子郵件的收件人,而藍色應該發送它自己的電子郵件。

我該怎麼做?我將使用dbsendmail來發送消息。

Create Table EmailMe
(
 ID  int IDENTITY(1,1) PRIMARY KEY NOT NULL
 ,name varchar(100)
 ,vendorid int
 ,email varchar(500)
)

Insert Into EmailMe (ID, name, email) VALUES
('purple', 12, 'purple@hsbcglobal.com')
,('green', 12, 'green@hsbcglobal.com')
,('blue', 1, 'blue@hsbcglobal.com')

在使用 COALESCE 函式獲取電子郵件列表之前,您可以使用 CTE 分解供應商,每個供應商一個。

CREATE TABLE EmailMe
   (
     ID INT IDENTITY(1, 1)
            PRIMARY KEY
            NOT NULL ,
     name VARCHAR(100) ,
     vendorid INT ,
     email VARCHAR(500)
   );

INSERT  INTO EmailMe
       ( name, vendorid, email )
VALUES  ( 'purple', 12, 'purple@hsbcglobal.com' )
,       ( 'green', 12, 'green@hsbcglobal.com' )
,       ( 'blue', 1, 'blue@hsbcglobal.com' );

DECLARE @EmailRecipients VARCHAR(MAX);

;
WITH    cteIds
         AS ( SELECT   MAX(ID) AS Id
              FROM     EmailMe
              GROUP BY vendorid
            )
   SELECT  @EmailRecipients = COALESCE(@EmailRecipients + ';', '') + email
   FROM    EmailMe e
           JOIN cteIds c ON c.Id = e.ID;

SELECT  @EmailRecipients;

結果是:

blue@hsbcglobal.com;green@hsbcglobal.com

引用自:https://dba.stackexchange.com/questions/152007