2

我想发送一封电子邮件,所有表格的状态在一天内都已修改。这是我尝试过的:

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 列具有每个表的最后修改的所有日期/时间戳。你知道为什么没有列出表的名称吗?

4

1 回答 1

0

请参阅MSDN

OBJECT_NAME 出错或调用者无权查看对象时返回 NULL。

或者,NULL 可能代表临时表。

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

于 2013-05-21T20:43:10.593 回答