SQL MAIL 输出表格疑问 这个要设置CSS的找个懂CSS的人帮你把代码写好你套格式去拼吧 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最近搞报告给上司,这是可用的,不过只在2008R2以上试过,格式没问题,你自己调吧DECLARE @tableHTML NVARCHAR(MAX) ;DECLARE @date SMALLDATETIMESET @date = CONVERT(CHAR(10), GETDATE(), 120)DECLARE @title VARCHAR(64)SELECT @title = CONVERT(CHAR(10), GETDATE(), 120) + ' DB Check Report 'DECLARE @DBA VARCHAR(1024)SET @DBA ='[email protected]'SET @tableHTML = N'<H1> ServerInformations</H1>' + N'<table border="1">' + N'<tr><th>ServerName</th><th>HostName</th>' + N'<th>Edtion</th><th>InstanceName</th><th>ProductVersion</th>' + N'<th>ProductLevel</th><th>CPU_Counts</th><th>Physical_Memory(GB)</th>' + N'<th>SQLServer_Start_Time</th><th>Virtual_Machine</th><th>CaptureDate</th>' + CAST(( SELECT td = ServerName , '' , td = HostName, '' , td = Edition, '' , td = InstanceName , '' , td=ProductVersion , '' , td = ProductLevel,'' , td = CPU_Counts , '' , td=[Physical_Memory(GB)] , '' , td = SQLServer_Start_Time,'' , '' , td=Virtual_Machine , '' , td = CaptureDate,'' from AuditDB.dbo.ServerInformationswhere CaptureDate between dateadd(dd,-1,GETDATE()) and GETDATE() FOR XML PATH('tr') , TYPE ) AS NVARCHAR(MAX)) + N'</table>'SET @tableHTML =@tableHTML+ N'<H1> DBLists</H1>' + N'<table border="1">' + N'<tr><th>name</th><th>State_Desc</th>' + N'<th>Create_Date</th><th>compatibility_level</th><th>collation_name</th>' + N'<th>is_auto_create_stats_on</th><th>is_auto_update_stats_on</th><th>recovery_model_desc</th>' + N'<th>is_published</th><th>is_distributor</th><th>log_reuse_wait_desc</th>' + N'<th>mirroring_state_desc</th><th>mirroring_partner_name</th><th>mirroring_role_desc</th>' + N'<th>mirroring_safety_level_desc</th><th>CaptureDate</th>' + CAST(( SELECT td = name , '' , td = State_Desc, '' , td = Create_Date, '' , td = compatibility_level , '' , td=collation_name , '' , td = is_auto_create_stats_on,'' , td = is_auto_update_stats_on , '' , td=recovery_model_desc , '' , td = is_published,'' , '' , td=is_distributor , '' , td=log_reuse_wait_desc , '' , td = mirroring_state_desc,'' , '' , td=mirroring_role_desc , '' , td = mirroring_safety_level_desc,'' , '' , td = CaptureDate,'' from AuditDB.dbo.DBListswhere CaptureDate between dateadd(dd,-1,GETDATE()) and GETDATE() FOR XML PATH('tr') , TYPE ) AS NVARCHAR(MAX)) + N'</table>'SET @tableHTML =@tableHTML+ N'<H1> DBFiles</H1>' + N'<table border="1">' + N'<tr><th>DBName</th><th>FILENAME</th>' + N'<th>physical_name</th><th>type_desc</th><th>currentsize</th>' + N'<th>LimitSIZE(MB)</th><th>GrowTH</th><th>CaptureDate</th>' + CAST(( SELECT td = DBName , '' , td = [FILENAME], '' , td = physical_name, '' , td = type_desc , '' , td=currentsize , '' , td = [LimitSIZE(MB)],'' , td = GrowTH , '' , td=CaptureDate , '' from AuditDB.dbo.DBFileswhere CaptureDate between dateadd(dd,-1,GETDATE()) and GETDATE() FOR XML PATH('tr') , TYPE ) AS NVARCHAR(MAX)) + N'</table>' SET @tableHTML =@tableHTML+ N'<H1> LongRunningQuerys</H1>' + N'<table border="1">' + N'<tr><th>total_worker_time</th><th>execution_count</th>' + N'<th>total_physical_reads</th><th>total_logical_reads</th><th>total_logical_writes</th>' + N'<th>last_rows</th><th>Avg CPU Time</th><th>queryText</th>' + N'<th>CaptureDate</th>' + CAST(( SELECT td = total_worker_time , '' , td = execution_count, '' , td = total_physical_reads, '' , td = total_logical_reads , '' , td=total_logical_writes , '', td=last_rows, '' , td =[Avg CPU Time],'' , td = queryText , '' , td=CaptureDate , '' from AuditDB.dbo.LongRunningQuerywhere CaptureDate between dateadd(dd,-1,GETDATE()) and GETDATE() FOR XML PATH('tr') , TYPE ) AS NVARCHAR(MAX)) + N'</table>' SET @tableHTML =@tableHTML+ N'<H1> Top 5 Waits</H1>' + N'<table border="1">' + N'<tr><th>Wait_type</th><th>Waiting_tasks_count</th>' + N'<th>Wait_time_ms</th><th>Max_wait_time_ms</th><th>Signal_wait_time_ms</th>' + N'<th>CaptureDate</th>' + CAST(( SELECT top 5 td = Wait_type , '' , td = Waiting_tasks_count, '' , td = Wait_time_ms, '' , td = Max_wait_time_ms , '' , td=Signal_wait_time_ms , '' , td=getdate(), '' from AuditDB.dbo.WaitStats where CaptureDate between dateadd(dd,-1,GETDATE()) and GETDATE() order by Wait_time_ms desc FOR XML PATH('tr') , TYPE ) AS NVARCHAR(MAX)) + N'</table>'SET @tableHTML =@tableHTML+ N'<H1>Unused Indexes</H1>' + N'<table border="1">' + N'<tr><th>Statement</th><th>index_name</th>' + N'<th>user_reads</th><th>user_writes</th><th>total_rows</th>' + N'<th>CaptureDate</th>' + CAST(( SELECT td = [Statement] , '' , td = index_name, '' , td = user_reads, '' , td = user_writes , '' , td=total_rows , '' , td=CaptureDate , '' from (SELECT '[' + DB_NAME() + '].[' + su.[name] + '].[' + o.[name] + ']' AS [Statement] , i.[name] AS [index_name] , ddius.[user_seeks] + ddius.[user_scans] + ddius.[user_lookups] AS [user_reads] , ddius.[user_updates] AS [user_writes] , SUM(SP.rows) AS [total_rows],GETDATE() AS CaptureDateFROM sys.dm_db_index_usage_stats ddius INNER JOIN sys.indexes i ON ddius.[object_id] = i.[object_id] AND i.[index_id] = ddius.[index_id] INNER JOIN sys.partitions SP ON ddius.[object_id] = SP.[object_id] AND SP.[index_id] = ddius.[index_id] INNER JOIN sys.objects o ON ddius.[object_id] = o.[object_id] INNER JOIN sys.sysusers su ON o.[schema_id] = su.[UID]WHERE ddius.[database_id] = DB_ID() -- current database only AND OBJECTPROPERTY(ddius.[object_id], 'IsUserTable') = 1 AND ddius.[index_id] > 0GROUP BY su.[name] , o.[name] , i.[name] , ddius.[user_seeks] + ddius.[user_scans] + ddius.[user_lookups] , ddius.[user_updates]HAVING ddius.[user_seeks] + ddius.[user_scans] + ddius.[user_lookups] = 0)awhere CaptureDate between dateadd(dd,-1,GETDATE()) and GETDATE() FOR XML PATH('tr') , TYPE ) AS NVARCHAR(MAX)) + N'</table>'EXEC msdb.dbo.sp_send_dbmail @profile_name='DBAEmail',@recipients = @DBA, @subject = @title, @body = @tableHTML, @body_format = 'HTML' ;--select * from msdb.dbo.sysmail_profile <table border = "0" style="table-layout:fixed "> 修改一下开头看看 看反了,你是要有border的哈,试试这个<style> .tt th{background:#a9a9a9;background-color:red;color:white;} .tt tr{font-weight:100;font-size:12;width:120pt;text-align:center;font-family:Lucida Sans Unicode;} .tt tr.altrow{ background-color:#c7e5ff; } .tt td{width:100px;padding:5px;word-wrap: break-word; word-break : break-all;} </style>'<table class = "tt" border="1" style="border-collapse:collapse;table-layout:fixed;word-break:break-all;"> 如何统计下列数据 excel导入sql的问题 我在存储过程中创建的临时表为什么不能用呢? SQL Server数据库安全规划 如何多次在数据库中随机的取10条不同的记录呢? 求助:一条SQL取出成绩表中每个班前三名的人员 如何判断一张表是否处于编辑状态 select count(*) from A;select count(*) from B;然后把这两个sql返回的结果相乘,如果用一个sql表示,怎么写啊? 递归问题,急。在线等待中 请问能否用VC++完成嵌入式SQL?如果不行,如何实现? sql server 一个问题,在线等回复 查询语句自动多执行一边
DECLARE @tableHTML NVARCHAR(MAX) ;
DECLARE @date SMALLDATETIME
SET @date = CONVERT(CHAR(10), GETDATE(), 120)
DECLARE @title VARCHAR(64)
SELECT @title = CONVERT(CHAR(10), GETDATE(), 120) + ' DB Check Report '
DECLARE @DBA VARCHAR(1024)
SET @DBA ='[email protected]'SET @tableHTML = N'<H1> ServerInformations</H1>' + N'<table border="1">'
+ N'<tr><th>ServerName</th><th>HostName</th>'
+ N'<th>Edtion</th><th>InstanceName</th><th>ProductVersion</th>'
+ N'<th>ProductLevel</th><th>CPU_Counts</th><th>Physical_Memory(GB)</th>'
+ N'<th>SQLServer_Start_Time</th><th>Virtual_Machine</th><th>CaptureDate</th>'
+ CAST(( SELECT td = ServerName ,
'' ,
td = HostName,
'' ,
td = Edition,
'' ,
td = InstanceName ,
'' ,
td=ProductVersion ,
'' ,
td = ProductLevel,''
,
td = CPU_Counts ,
'' ,
td=[Physical_Memory(GB)] ,
'' ,
td = SQLServer_Start_Time,''
,
'' ,
td=Virtual_Machine ,
'' ,
td = CaptureDate,''
from AuditDB.dbo.ServerInformations
where CaptureDate between dateadd(dd,-1,GETDATE()) and GETDATE() FOR
XML PATH('tr') ,
TYPE
) AS NVARCHAR(MAX)) + N'</table>'SET @tableHTML =@tableHTML+ N'<H1> DBLists</H1>' + N'<table border="1">'
+ N'<tr><th>name</th><th>State_Desc</th>'
+ N'<th>Create_Date</th><th>compatibility_level</th><th>collation_name</th>'
+ N'<th>is_auto_create_stats_on</th><th>is_auto_update_stats_on</th><th>recovery_model_desc</th>'
+ N'<th>is_published</th><th>is_distributor</th><th>log_reuse_wait_desc</th>'
+ N'<th>mirroring_state_desc</th><th>mirroring_partner_name</th><th>mirroring_role_desc</th>' + N'<th>mirroring_safety_level_desc</th><th>CaptureDate</th>' + CAST(( SELECT td = name ,
'' ,
td = State_Desc,
'' ,
td = Create_Date,
'' ,
td = compatibility_level ,
'' ,
td=collation_name ,
'' ,
td = is_auto_create_stats_on,''
,
td = is_auto_update_stats_on ,
'' ,
td=recovery_model_desc ,
'' ,
td = is_published,''
,
'' ,
td=is_distributor ,
'' ,
td=log_reuse_wait_desc ,
'' ,
td = mirroring_state_desc,''
,
'' ,
td=mirroring_role_desc ,
'' ,
td = mirroring_safety_level_desc,''
,
'' ,
td = CaptureDate,''
from AuditDB.dbo.DBLists
where CaptureDate between dateadd(dd,-1,GETDATE()) and GETDATE() FOR
XML PATH('tr') ,
TYPE
) AS NVARCHAR(MAX)) + N'</table>'SET @tableHTML =@tableHTML+ N'<H1> DBFiles</H1>' + N'<table border="1">'
+ N'<tr><th>DBName</th><th>FILENAME</th>'
+ N'<th>physical_name</th><th>type_desc</th><th>currentsize</th>'
+ N'<th>LimitSIZE(MB)</th><th>GrowTH</th><th>CaptureDate</th>'
+ CAST(( SELECT td = DBName ,
'' ,
td = [FILENAME],
'' ,
td = physical_name,
'' ,
td = type_desc ,
'' ,
td=currentsize ,
'' ,
td = [LimitSIZE(MB)],''
,
td = GrowTH ,
'' ,
td=CaptureDate ,
''
from AuditDB.dbo.DBFiles
where CaptureDate between dateadd(dd,-1,GETDATE()) and GETDATE() FOR
XML PATH('tr') ,
TYPE
) AS NVARCHAR(MAX)) + N'</table>'
SET @tableHTML =@tableHTML+ N'<H1> LongRunningQuerys</H1>' + N'<table border="1">'
+ N'<tr><th>total_worker_time</th><th>execution_count</th>'
+ N'<th>total_physical_reads</th><th>total_logical_reads</th><th>total_logical_writes</th>'
+ N'<th>last_rows</th><th>Avg CPU Time</th><th>queryText</th>'
+ N'<th>CaptureDate</th>'
+ CAST(( SELECT td = total_worker_time ,
'' ,
td = execution_count,
'' ,
td = total_physical_reads,
'' ,
td = total_logical_reads ,
'' ,
td=total_logical_writes ,
'',
td=last_rows,
'' ,
td =[Avg CPU Time],''
,
td = queryText ,
'' ,
td=CaptureDate ,
''
from AuditDB.dbo.LongRunningQuery
where CaptureDate between dateadd(dd,-1,GETDATE()) and GETDATE() FOR
XML PATH('tr') ,
TYPE
) AS NVARCHAR(MAX)) + N'</table>'
SET @tableHTML =@tableHTML+ N'<H1> Top 5 Waits</H1>' + N'<table border="1">'
+ N'<tr><th>Wait_type</th><th>Waiting_tasks_count</th>'
+ N'<th>Wait_time_ms</th><th>Max_wait_time_ms</th><th>Signal_wait_time_ms</th>'
+ N'<th>CaptureDate</th>'
+ CAST(( SELECT top 5 td = Wait_type ,
'' ,
td = Waiting_tasks_count,
'' ,
td = Wait_time_ms,
'' ,
td = Max_wait_time_ms ,
'' ,
td=Signal_wait_time_ms ,
'' ,
td=getdate(),
''
from AuditDB.dbo.WaitStats
where CaptureDate between dateadd(dd,-1,GETDATE()) and GETDATE()
order by Wait_time_ms desc
FOR
XML PATH('tr') ,
TYPE
) AS NVARCHAR(MAX)) + N'</table>'SET @tableHTML =@tableHTML+ N'<H1>Unused Indexes</H1>' + N'<table border="1">'
+ N'<tr><th>Statement</th><th>index_name</th>'
+ N'<th>user_reads</th><th>user_writes</th><th>total_rows</th>'
+ N'<th>CaptureDate</th>'
+ CAST(( SELECT td = [Statement] ,
'' ,
td = index_name,
'' ,
td = user_reads,
'' ,
td = user_writes ,
'' ,
td=total_rows ,
'' ,
td=CaptureDate ,
''
from (SELECT '[' + DB_NAME() + '].[' + su.[name] + '].[' + o.[name] + ']' AS [Statement] ,
i.[name] AS [index_name] ,
ddius.[user_seeks] + ddius.[user_scans] + ddius.[user_lookups] AS [user_reads] ,
ddius.[user_updates] AS [user_writes] ,
SUM(SP.rows) AS [total_rows],GETDATE() AS CaptureDate
FROM sys.dm_db_index_usage_stats ddius
INNER JOIN sys.indexes i ON ddius.[object_id] = i.[object_id]
AND i.[index_id] = ddius.[index_id]
INNER JOIN sys.partitions SP ON ddius.[object_id] = SP.[object_id]
AND SP.[index_id] = ddius.[index_id]
INNER JOIN sys.objects o ON ddius.[object_id] = o.[object_id]
INNER JOIN sys.sysusers su ON o.[schema_id] = su.[UID]
WHERE ddius.[database_id] = DB_ID() -- current database only
AND OBJECTPROPERTY(ddius.[object_id], 'IsUserTable') = 1
AND ddius.[index_id] > 0
GROUP BY su.[name] ,
o.[name] ,
i.[name] ,
ddius.[user_seeks] + ddius.[user_scans] + ddius.[user_lookups] ,
ddius.[user_updates]
HAVING ddius.[user_seeks] + ddius.[user_scans] + ddius.[user_lookups] = 0
)a
where CaptureDate between dateadd(dd,-1,GETDATE()) and GETDATE() FOR
XML PATH('tr') ,
TYPE
) AS NVARCHAR(MAX)) + N'</table>'EXEC msdb.dbo.sp_send_dbmail @profile_name='DBAEmail',@recipients = @DBA, @subject = @title,
@body = @tableHTML, @body_format = 'HTML' ;
--select * from msdb.dbo.sysmail_profile
看反了,你是要有border的哈,试试这个<style>
.tt th{background:#a9a9a9;background-color:red;color:white;}
.tt tr{font-weight:100;font-size:12;width:120pt;text-align:center;font-family:Lucida Sans Unicode;}
.tt tr.altrow{
background-color:#c7e5ff;
}
.tt td{width:100px;padding:5px;word-wrap: break-word; word-break : break-all;}
</style>'
<table class = "tt" border="1" style="border-collapse:collapse;table-layout:fixed;word-break:break-all;">