0

我是存储过程的新手。我尝试通过阅读表格来发送邮件并执行以下查询

create procedure mailtouser
as
  declare @data varchar(max),
  @user varchar(max)
  as
    set @data='set nocount on;select col_name from tbl_name where id=1;set nocount off;'
    set @user='user@example.com'
    set @query=
    exec sp_send_dbmail
           @profile_name  =  'profile',
           @recipients  =  @user,
           @subject  =  'automail',
       @execute_query_database  =  'database',
       @query = @data;
   end
end

执行邮件用户去

在执行这个脚本时,我收到了邮件

作为

col_name
------------------------------------------------------------------------------------------------------------
datas.

如何避免这个 col_name 和行。我只希望邮件中的数据。

4

1 回答 1

0

首先,您实际上是否将数据库命名为 [database]?它应该类似于 [AdventureWorks2012]。

其次,查询将执行并返回结果。如果您使用三部分表示法 [AdventureWorks2012].[Person].[Address],则不需要 @execute_query_database。

第三,此选项还有其他参数。去看一下。

@query_result_header @query_result_width @query_result_separator @exclude_query_output

另一方面,如果您想完全控制,请将正文格式更改为 HTML。

在 SET 语句中运行查询以按照您想要的方式格式化数据。

-- 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' ;

真挚地

Ĵ

于 2014-03-24T15:57:34.197 回答