我想发送一天内修改过的所有表格的电子邮件状态。这就是我试过的:
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列中包含每个表的最后修改的所有日期/时间戳。 你知道为什么没有列出表的名字吗?
答案 0 :(得分:0)
请参阅MSDN。
OBJECT_NAME 错误时返回NULL,或者调用者没有查看对象的权限。
或许NULL表示临时表。
元数据功能OBJECT_NAME是特定于数据库的,并使用当前数据库中目录表中的信息。如果您在另一个数据库(比如master)中运行查询,那么名称将是错误的(因为object_id可能与master数据库中的不同对象匹配)或NULL。因此,为了获得正确的对象名称,必须在您感兴趣的数据库的上下文中执行查询。