2011-01-19 75 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