电子邮件SQL查询结果

时间:2013-05-21 20:12:36

标签: sql-server-2008

我想发送一天内修改过的所有表格的电子邮件状态。这就是我试过的:

EXEC msdb.dbo.sp_send_dbmail 
   @profile_name='EmailProfile', 
   @recipients='myemail@email.com', 
   @subject='Import status', 
   @body= 'Data import precess completed.', 
   @query = 'SELECT OBJECT_NAME(OBJECT_ID) AS Tables, last_user_update AS Updated 
             FROM sys.dm_db_index_usage_stats 
            WHERE database_id = DB_ID(''DatabaseName'') 
               AND last_user_update >= DATEADD(DAY, 0, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP))', 
   @attach_query_result_as_file = 1, @query_attachment_filename ='Results.txt'

电子邮件附带了附加文件Result.txt,但在Tables列下没有表名,而只是NULL。 On Updated列中包含每个表的最后修改的所有日期/时间戳。 你知道为什么没有列出表的名字吗?

1 个答案:

答案 0 :(得分:0)

请参阅MSDN

  

OBJECT_NAME   错误时返回NULL,或者调用者没有查看对象的权限。

或许NULL表示临时表。

元数据功能OBJECT_NAME是特定于数据库的,并使用当前数据库中目录表中的信息。如果您在另一个数据库(比如master)中运行查询,那么名称将是错误的(因为object_id可能与master数据库中的不同对象匹配)或NULL。因此,为了获得正确的对象名称,必须在您感兴趣的数据库的上下文中执行查询。