sp_send_dbmail не будет отправлять результаты запроса - PullRequest
7 голосов
/ 24 августа 2009

Я перепробовал все варианты на каждом предложенном форуме, но безрезультатно! Необходимо отправить результаты SQLPERF (logspace), которые были сохранены в таблице, через sp_send_dbmail получателю.

На втором этапе задания происходит сбой. Пожалуйста, помогите!

EXEC msdb.dbo.sp_send_dbmail
@profile_name= 'MyDBA',
@recipients= 'Mack@mydba.co.za',
@subject='Log Warning',
@query='SELECT * from #TempForLogSpace WHERE LogSpaceUsed >80

Ответы [ 3 ]

10 голосов
/ 24 августа 2009

Вы не можете делать запросы из временной таблицы, используя почту базы данных. Сеанс, который вы использовали для создания временной таблицы (я полагаю, шаг 1 вашей работы), был закрыт, а новый шаг начался, когда начался шаг 2. Поскольку сеанс был закрыт, таблица была удалена (даже если таблица не была удалена, потому что это новый сеанс, у вас нет доступа к временной таблице других сеансов).

Либо создайте физическую таблицу и используйте ее (либо в базе данных tempdb, либо в вашей базе данных), либо поместите код, который создает вывод в @query, с выбором * из #TempForLogSpace в конце (хранимая процедура будет много проще разобраться в этом случае).

5 голосов
/ 31 января 2011

Я знаю, что этот поток немного староват, но в случае, если кто-то наткнулся на это, проблема в том, что mrdenny сказал, что хранимая процедура sp_send_dbmail запускается в своем собственном сеансе, однако вы можете обойти это, используя вместо этого глобальную временную таблицу добавьте в таблицу два знака фунта (##)).

0 голосов
/ 18 октября 2013

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

Локальные и глобальные временные таблицы в SQL Server

...