2013-09-27 100 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' ;