一尘不染

sp_send_dbmail中的局部变量?

sql

我正在研究一个SQL存储过程,该过程应该发送带有查询结果的附件。

我正在使用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 @recipients=@recipients_list,
        @subject = @subject,
        @query = @query,
        @attach_query_result_as_file = 1, 
        @query_result_width = 4000, 
        @query_attachment_filename = 'Details.txt'

我有什么办法可以在此存储过程中引用局部变量吗?如果没有,为什么不呢?

TIA!

(我正在使用SQL Server 2005)


阅读 187

收藏
2021-05-23

共1个答案

一尘不染

该查询在与原始代码正文不同的上下文中运行,因此它不知道任何局部变量。尝试改用全局临时表。

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 @recipients=@recipients_list,
        @subject = @subject,
        @query = @query,
        @attach_query_result_as_file = 1, 
        @query_result_width = 4000, 
        @query_attachment_filename = 'Details.txt'

DROP TABLE ##t
2021-05-23