Локальные переменные в sp_send_dbmail? - PullRequest
3 голосов
/ 19 января 2011

Я работаю над хранимой процедурой 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'

Можно ли как-нибудь сослаться на локальную переменную в этой хранимой процедуре? Если нет, то почему?

ТИА!

(я использую SQL Server 2005)

1 Ответ

4 голосов
/ 19 января 2011

Запрос выполняется в другом контексте, чем исходное тело кода, поэтому он не знает ни о каких локальных переменных. Попробуйте вместо этого использовать глобальную временную таблицу.

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
...