2013年8月26日 星期一

[2005] 以SQL直接產生HTML Table並寄送

SQL SERVER所提供的SQL MAIL相當簡便好用,本範例將以XML PATH以一組SQL直接產生HTML Table並以SQL MAIL寄出,本範例將針對超過特定值之資料予以Highlight對齊(置右為例)及如何增加Hyperlink以開啟特定網頁資料等幾項重點進行說明:
1.  Age >40 紅字表示(數值欄位置右處理)
2.  Sex =F 之資料,以黃色底色呈現
3.  Company資料將開啟Yahoo Finance指定公司之股票資料
ex: http://finance.yahoo.com/q?s=MSFT&ql=0%3e

結果:(Email)

SQL:

CREATE TABLE #Rec
(
   [No]          [int]
,  [Name]       [varchar](20)
,  [Age]        [int]
,  [Sex]        [CHAR](1)
,  [Company]   [varchar] (100)
)

INSERT INTO #Rec
([No], [Name], [Age], [Sex], [Company])
SELECT 1, 'John',  25, 'M', 'MSFT'
UNION ALL
SELECT 2, 'Roger', 48, 'M', 'AMAT'
UNION ALL
SELECT 3, 'May',   20, 'F', ''
UNION ALL
SELECT 4, 'Jones', 43, 'M', 'KLAC'

DECLARE @HTML    nvarchar(MAX) ;
SET @HTML =
  N'<body style="font-family: Verdana; font-size: 8pt">'+
  N'<H5>Record</H5>' +
  N'<table border="1" cellspacing="1" cellpadding="1" style="border-collapse:collapse" width="300">' +
  N'  <tr style="color:White;background-color:#F88017;">' +
  N'    <th>No</th><th>Name</th><th>Age</th><th>Sex</th><th>Company</th>' +
  N'  </tr>' +
    CAST ( (
         SELECT     
             --(1). No
             [No] td, ''  
                                               
             --(2). Name
             , [Name] td, '' 
                
             --(3). Age; 1. 超過40時,Fore Color設為紅色; 2.數值置右對齊
             , CASE WHEN [Age] >=40 THEN 'color:red; font-weight:bold' END [td/@style]
             , 'right' [td/@align]
             , [Age] td, ''   
                            
             --(4). [Sex]; 3. 當為F時,BG Color設為Yellow
             , CASE WHEN [Sex]= 'F'  THEN '#FFFF00' END [td/@bgcolor]
             , [Sex] td, ''

             --(5). [Company]; 4.開啟網頁,以資料庫值帶入Query String
             , 'http://finance.yahoo.com/q?s='+ [Company] +'&ql=0>' [td/a/@href]
             , [Company]  [td/a]                         
          FROM  #Rec
          ORDER BY [No]
          FOR XML PATH('tr'), TYPE
    ) AS   nvarchar(MAX) ) +
  N'</table>' ;

EXEC msdb.dbo.sp_send_dbmail @recipients='HarryHsu@xxxxxxx.com;'
    , @subject             = 'HTML Mail Test'
    , @body                = @HTML
    , @body_format    = 'HTML'


註:HTML Tag使用/概念及SQL MAIL設定請自行參閱相關文件。

1 則留言: