所以我在下面的代码中使用存储过程发送html格式的电子邮件。我从这里得到了它:
https://stackoverflow.com/a/29708178/1452574
现在,代码运行得很好,我有一个很好的html表,但问题是我的ROUND没有阻止。如果我在SSMS中运行代码,它显然可以工作,舍入到2个小数位,但是当我收到电子邮件时,数字列看起来像这样:
我的意思是,我猜它是四舍五入的,但我不想在最后看到所有那些额外的零或加号。我已经尝试过铸造和格式化为一百万种不同的数据类型,我似乎无法得到一个带有2位小数的好数字。我得到一个完整的数字(如果我演员说Numeric),或者你在上面的截图中看到的混乱。我尝试使用FORMAT来N2,但是出现了这个错误:
将nvarchar值“3.39”转换为数据类型int时转换失败。
下面的代码,这不是全部,但第一部分只是测试行数,所以我不认为它是相关的:
EXEC spQueryToHtmlTable @html = @html OUTPUT,
@query =
N'SELECT
e.EmplName,
CASE
WHEN SUM(t.ManHrs) IS NULL THEN 0
ELSE ROUND(SUM(t.ManHrs), 2)
END AS [Hrs Logged]
FROM EmplCode e
LEFT JOIN TimeTicketDet t ON e.EmplCode = t.EmplCode
AND CAST(t.TicketDate AS DATE) = CAST(GETDATE() AS DATE)
AND t.WorkCntr <> 50
WHERE e.DeptNum LIKE ''PROD %''
AND e.Active = ''Y''
GROUP BY e.EmplName
HAVING ROUND(SUM(t.ManHrs), 2) < 6
OR ROUND(SUM(t.ManHrs), 2) IS NULL';
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Email System',
@recipients = 'sample@gmail.com',
@body = @html,
@body_format = 'HTML',
@query_no_truncate = 1,
@attach_query_result_as_file = 0,
@execute_query_database = 'CompanyDB';