2017-02-20 69 views
0

我想使用sql server電子郵件選項發送電子郵件,我已經可以發送電子郵件,但現在我試圖將該電子郵件發送給動態收件人,例如...我有下表:發送電子郵件給存儲在表中的每個收件人

ID |電子郵件
..1 | [email protected]
..2 | [email protected]

我的代碼,我需要做以下的事情:

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

我想要做的是選擇從表中的郵件,所以如果我編輯一個電子郵件,我不必改變任何關於我的代碼,只需更新我的表中的信息。

我想也許做到這一點通過使用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 
相關問題