2011-01-19 76 views
3

我正在處理一個SQL存儲過程,該存儲過程應該用查詢結果發送附件。sp_send_dbmail中的局部變量?

我使用sp_send_dbmail發送電子郵件。

在我想發送的查詢中,我加入了表變量。當我執行存儲過程時,我收到一條錯誤消息,表示該變量不存在。

我的代碼:

DECLARE @t TABLE (
    id INT IDENTITY(1,1), 
    some fields 
) 

DECLARE @query VARCHAR(MAX) 
SET @query = 'SELECT 
    some values 
FROM @t t 
    INNER JOIN dbo.Table d ON t.field = d.field 
EXEC msdb.dbo.sp_send_dbmail @[email protected]_list, 
     @subject = @subject, 
     @query = @query, 
     @attach_query_result_as_file = 1, 
     @query_result_width = 4000, 
     @query_attachment_filename = 'Details.txt' 

有什麼辦法,我指的是局部變量這個存儲過程中?如果不是,爲什麼不呢?

TIA!

(我使用SQL Server 2005)

回答

4

查詢在不同的環境比你原來的代碼運行的身體,所以它是不知道任何局部變量。嘗試使用全局臨時表來代替。

CREATE TABLE ##t (
    id INT IDENTITY(1,1), 
    some fields 
) 

DECLARE @query VARCHAR(MAX) 
SET @query = 'SELECT 
    some values 
FROM ##t t 
    INNER JOIN dbo.Table d ON t.field = d.field' 
EXEC msdb.dbo.sp_send_dbmail @[email protected]_list, 
     @subject = @subject, 
     @query = @query, 
     @attach_query_result_as_file = 1, 
     @query_result_width = 4000, 
     @query_attachment_filename = 'Details.txt' 

DROP TABLE ##t 
+0

爲什麼會使用臨時表的幫助?臨時表也不在我原來的代碼中嗎? – chama 2011-01-19 19:30:16