Sql-Server

msdb.dbo.sp_send_dbmail 臨時表不存在

  • December 27, 2019

我已經創建了一個臨時表並想通過電子郵件發送結果我收到以下錯誤。

查詢執行失敗:消息 208,級別 16,狀態 1,伺服器 PRODYCHDBX3\X3V7,第 1 行無效的對象名稱“#WODups”。

創建臨時表後,我執行了以下程式碼。

DECLARE             @recordcount INT
SELECT @recordcount = ISNULL(COUNT(*),0) 
FROM #WODups

IF (@recordcount > 0)

BEGIN

SELECT * FROM #WODups
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'SQL Mail',
@recipients = 'jXXn.XXXn??@yXXXXXX.com;XXXXXXXX1@gmail.com',           
@query = 'SELECT FROM #WODups',

@subject = 'Duplicate Work Order Production Tracking',
--@attach_query_result_as_file = 1,
@body =0;

DROP TABLE #WODups

為什麼我會收到此錯誤,我該如何解決?

scott-hodgin在評論中回答:

您不能使用 dbmail 訪問本地臨時表。至少,它必須是一個全域(雙##)表。由於 dbmail 在與創建臨時表的程序不同的程序中執行,甚至全域表也可能因鎖定/阻塞而成為問題。

dbmail 程序也看不到表變數。

我使用的一個選項是在本地臨時表上聲明一個游標,獲取每一行並“建構”電子郵件正文,而不是嘗試“附加”文件。這取決於您要提取多少數據。格式化可能有點棘手。建構主體後,只需呼叫 send_dbmail 儲存過程。

引用自:https://dba.stackexchange.com/questions/253648