2013-05-21 94 views
2

我想發送一個電子郵件狀態的所有表格在一天內被修改。這是我試過的:電子郵件SQL查詢結果

EXEC msdb.dbo.sp_send_dbmail 
    @profile_name='EmailProfile', 
    @recipients='[email protected]', 
    @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附加,但在表列下沒有表的名稱,而只是NULL。在更新列上有每個表的最後修改的所有日期/時間戳。 你知道爲什麼表名沒有列出嗎?

+0

你應該格式化你的sql ... –

+0

@AbeMiessler如何格式化我的SQL? – tkvo

+0

那麼沒有官方的方式,但是什麼使它更具可讀性。我繼續和格式化你的SQL給你一個想法... –

回答

0

請參閱MSDN

OBJECT_NAME 錯誤時返回NULL或調用方沒有查看對象的權限。

或者可能NULL表示臨時表。

元數據功能OBJECT_NAME是特定於數據庫的,並使用當前數據庫中目錄表中的信息。如果在不同的數據庫(比如master)中運行查詢,那麼名稱將會出錯(因爲object_id可能與master數據庫中的不同對象匹配)或NULL。因此,爲了獲得正確的對象名稱,查詢必須在您感興趣的數據庫的上下文中執行。

+0

當我只運行Select查詢,然後返回所有表的名稱。我們在這裏談論什麼權限? – tkvo

+0

我編輯了我的答案。 –