2013-09-27 27 views
0

我正在創建一份報告,以便每天發送。在其中一個欄中,我有與銷售訂單關聯的所有物料編號的字符串(因此一個銷售訂單可能包含多個物料編號)。商品編號字符串由','分隔。爲了能夠做到這一點,我使用了Select語句,其中訂單號相同,用於STUFF中的XML PATH('')。TSQL通過電子郵件消息在單元格中返回

在生成了我的數據的臨時表後,我正在發送數據的電子郵件。我在@mailmsg中使用HTML格式設置表併發送它。我的問題是,當電子郵件發送列的所有項目編號都在同一行,我需要他們軟返回到一個新行(但同一單元格)。

我試圖在我的STUFF函數中使用CHAR(10)和CHAR(13)以否爲準。

有什麼建議嗎?下面是我的代碼爲我的東西進入我的臨時表:

UPDATE @SOTable 
Set PODetails = STUFF(( 
       Select ', PONumber: ' + CAST(PONum AS VARCHAR), 
       ', POQty: ' + CAST(POQty AS VARCHAR) 
From @POTable 
Where SONo = PONo 
FOR XML PATH('') 
    ),1, 1, '') 

那麼對於我的郵件後,我填寫的表頭的數據做到這一點:

  CAST ((
       select 
        (convert(varchar(8), SO.SONum)) as [TD align=center], '', 
        (CONVERT(varchar(8), SO.SOItmNo)) as [TD align=center], '', 
        td = (ltrim(rtrim(SO.SODesc))), '', 
        (convert(varchar(8), SO.SONSN)) as [TD align=center], '', 
        CONVERT(varchar(8), SO.SOSRNo)as [TD align=center], '', 
        convert(varchar(3), SO.SOSRQty)as [TD align=center], '', 
        convert(varchar(3), SO.SOUOM)as [TD align=center], '', 
        CAST(convert(varchar, SO.SODate, 101) AS VARCHAR) as [TD align=center], '', 
        td = SO.PODetails 
       from @SOTable SO 
       order by SO.SODate 
       for XML RAW('tr'), ELEMENTS 
      ) as nvarchar(max)) 
+0

如果電子郵件的內容,如果HTML,你需要一個''
標籤,而不是'CHAR(10)+ CHAR(13)'。 –

+0

我試過把'
'放在東西里,它沒有工作 –

回答

1

看看我blog entry數據庫郵件和不同的電話。

的關鍵是設置格式爲HTML

@body_format = 'HTML' ; 

下面是一個使用Adventure Works公司創建HTML表的代碼片段。

如果您仍有問題,請回信。

約翰

代碼段

-- Send with embedded html table containing query data 
DECLARE @VAR_HTML NVARCHAR(MAX) ; 
SET @VAR_HTML = 
N'<h1>Work Order Report<h1>' + 
N'<table border="1">' + 
N'<tbody><tr><th>Work Order ID</th><th>Product ID</th>' + 
N'<th>Name</th><th>Order Qty</th><th>Due Date</th>' + 
N'<th>Expected Revenue</th></tr>' + 
CAST ((SELECT td = wo.WorkOrderID, '', 
td = p.ProductID, '', 
td = p.Name, '', 
td = wo.OrderQty, '', 
td = wo.DueDate, '', 
td = (p.ListPrice - p.StandardCost) * wo.OrderQty 
FROM AdventureWorks2008R2.Production.WorkOrder as wo 
JOIN AdventureWorks2008R2.Production.Product AS p 
ON wo.ProductID = p.ProductID 
WHERE DueDate > '2006-04-30' 
AND DATEDIFF(dd, '2006-04-30', DueDate) < 2 
ORDER BY DueDate ASC, 
(p.ListPrice - p.StandardCost) * wo.OrderQty DESC 
FOR XML PATH('tr'), TYPE 
) AS NVARCHAR(MAX)) + 
N'</tbody></table>' 

EXEC msdb.dbo.sp_send_dbmail 
@recipients='[email protected]', 
@subject = 'Work Order List', 
@body = @VAR_HTML, 
@body_format = 'HTML' ;