2014-02-25 30 views
0

如果他們沒有通過Intranet Web應用程序完成認證表單,我的任務是發送電子郵件提醒給我公司的員工。在SQL Server 2008 R2中發送電子郵件

我正在考慮編寫一個在夜間數據庫作業(SQL Server 2008 R2)中調用的存儲過程。 proc將選擇員工的電子郵件地址值,並通過光標循環查看,以便爲每個發現的電子郵件使用msdb.dbo.sp_send_dbmail發送電子郵件。

我擔心的是,這是一家大公司,每晚都會有數以萬計的電子郵件出來。發送大量電子郵件時是否有辦法緩解性能問題?或者在成千上萬的水平上,它不應該成爲一個問題?

+0

我認爲這將是更多的郵件服務器的問題,這個問題可能會更好地放在服務器故障或數據庫管理員。 –

回答

2

我認爲在你的程序中你可以創建一個Temp表/表變量,並用你想發送電子郵件的電子郵件填充它。

一旦你有一個表中的所有電子郵件,那麼你可以用;串聯的電子郵件地址,並將其存儲到一個變量,並通過該變量作爲參數傳遞給msdb.dbo.sp_send_dbmail PROC的@recipients參數。

事情是這樣的......

說你有填充表變量叫你的電子郵件程序中的電子郵件

DECLARE @Emails TABLE(Email NVARCHAR(1000)) 
INSERT INTO @Emails VALUES 
('[email protected]'),('[email protected]'),('[email protected]') --<-- Three emails you want to send email 

級聯

DECLARE @Email_List NVARCHAR(MAX); --<-- Variable to store emails List 

SELECT @Email_List = STUFF((SELECT ';' + Email [text()] 
          FROM @Emails 
          FOR XML PATH(''),TYPE) 
          .value('.','NVARCHAR(MAX)'),1,1, '')     
FROM @Emails e 

-- Test SELECT @Email_List 
-- RESULT: [email protected];[email protected];[email protected] 

現在把這個變量@recipients參數

EXECUTE msdb.dbo.sp_send_dbmail @profile_name = 'ProfileName' 
           , @recipients = @Email_List 
           , @subject  = 'Some_Subject' 
+0

這是一個非常有趣的想法。我知道@recipients(和@blind_copy_recipients)是一個varchar(max),所以它可以容納大量的地址。也就是說,根據你的其他說明,這對於服務器人員來說真的是一個問題嗎? – Yoav

+0

@Yoav那麼你有一個解決方案在這裏,我沒有看到任何你需要得到「服務器人」參與的任何理由:) –

+0

你是對的,這是一個很好的解決方案,並標記爲這樣。 – Yoav

相關問題