0

私は毎日送信するレポートを作成しています。列の 1 つに、販売注文に関連付けられたすべてのアイテム番号の文字列があります (つまり、1 つの販売注文から複数のアイテム番号になる可能性があります)。アイテム番号文字列は、',' で区切られます。これを行うために、STUFF 内の XML PATH('') に対して、注文番号が同じである Select ステートメントを使用しています。

データのこの一時テーブルを生成した後、データの電子メールを送信しています。テーブルを設定して送信する@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))
4

1 に答える 1

1

データベース メールとさまざまな呼び出しに関する私のブログ エントリをチェックしてください。

重要なのは、フォーマットを 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='john@craftydba.com',
@subject = 'Work Order List',
@body = @VAR_HTML,
@body_format = 'HTML' ;
于 2013-09-27T18:52:31.583 に答える