2014-03-24 33 views
0

我是新來的存儲過程。我已經通過讀取表試圖郵件和沒了下文查詢如何避免在調用sp_send_dbmail時顯示行名的列名?

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='[email protected]' 
    set @query= 
    exec sp_send_dbmail 
      @profile_name = 'profile', 
      @recipients = @user, 
      @subject = 'automail', 
     @execute_query_database = 'database', 
     @query = @data; 
    end 
end 

EXEC mailtouser 在執行這個腳本去

,我得到郵件

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

如何避免此col_name和行。我只需要郵件中的數據。

回答

0

首先,你是否將數據庫命名爲[數據庫]?它應該是[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='[email protected]', 
@subject = 'Work Order List', 
@body = @VAR_HTML, 
@body_format = 'HTML' ; 

此致

Ĵ