Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Процедура sp_send_dbmail. Вложение csv, Необходимо объявить табличную переменную "@t".  [new]
2viper2viper
Member

Откуда:
Сообщений: 271
В запросе используется конструкция IF ELSE
Отправка письма выполняется только если с результате CTE cter выгружается более 0 строк
С этой целью использую временную таблицу @t
Но при выполнении запроса: Необходимо объявить табличную переменную "@t". Ссылка на @query
Как поступить если приаттачить нужно файл с результатом именно временной таблицы?

DECLARE @counts int;
DECLARE @t table (id int,title int,fio nvarchar(100),start date,move date,end date);

 INSERT INTO @t (id,title,FIO,start,move,end)
 SELECT * FROM cter 

 SELECT @counts = (SELECT count(*) FROM @t)

 IF @counts >0
 BEGIN

exec sp_send_dbmail
@recipients =  'b@gmail.com',
@body_format = 'HTML',
@subject = N'Исправьте ошибку',
@query=' SELECT * FROM @t',
@query_attachment_filename = 'bank.csv',
@attach_query_result_as_file = 1


И второй вопрос, файлы xls, xlsx прикрепить можно, при этом чтобы их открытие и работа с ними не сопровождалась ошибками. Без создания локального шаблона. Или шаблон - наиболее правильное решение, с учетом возможностей форматирования?
10 сен 15, 13:34    [18132578]     Ответить | Цитировать Сообщить модератору
 Re: Процедура sp_send_dbmail. Вложение csv, Необходимо объявить табличную переменную "@t".  [new]
Glory
Member

Откуда:
Сообщений: 104760
2viper2viper
Как поступить если приаттачить нужно файл с результатом именно временной таблицы?

Прочитать в хелпе про то, как запускается запрос из @query
10 сен 15, 13:36    [18132597]     Ответить | Цитировать Сообщить модератору
 Re: Процедура sp_send_dbmail. Вложение csv, Необходимо объявить табличную переменную "@t".  [new]
2viper2viper
Member

Откуда:
Сообщений: 271
Glory
2viper2viper
Как поступить если приаттачить нужно файл с результатом именно временной таблицы?

Прочитать в хелпе про то, как запускается запрос из @query


Да, видел "что запрос выполняется в отдельном сеансе, так что локальные переменные в скрипте, вызываемом процедурой sp_send_dbmail, недоступны для запроса." Но в том и вопрос, что подскажите пожалуйста, как обойти @t?
Может создать в запросе в tempbd таблицу и удалить после отправки. Прошу совет как правильнее всего поступить
10 сен 15, 13:51    [18132704]     Ответить | Цитировать Сообщить модератору
 Re: Процедура sp_send_dbmail. Вложение csv, Необходимо объявить табличную переменную "@t".  [new]
Glory
Member

Откуда:
Сообщений: 104760
2viper2viper
Да, видел "что запрос выполняется в отдельном сеансе, так что локальные переменные в скрипте, вызываемом процедурой sp_send_dbmail, недоступны для запроса." Но в том и вопрос, что подскажите пожалуйста, как обойти @t?

Вы троль что ли ?
Или вы не понимаете прочитанного ?
" локальные переменные в скрипте, вызываемом процедурой sp_send_dbmail, недоступны для запроса"
10 сен 15, 13:53    [18132717]     Ответить | Цитировать Сообщить модератору
 Re: Процедура sp_send_dbmail. Вложение csv, Необходимо объявить табличную переменную "@t".  [new]
2viper2viper
Member

Откуда:
Сообщений: 271
Glory
2viper2viper
Да, видел "что запрос выполняется в отдельном сеансе, так что локальные переменные в скрипте, вызываемом процедурой sp_send_dbmail, недоступны для запроса." Но в том и вопрос, что подскажите пожалуйста, как обойти @t?

Вы троль что ли ?
Или вы не понимаете прочитанного ?
" локальные переменные в скрипте, вызываемом процедурой sp_send_dbmail, недоступны для запроса"


Glory, к чему этот нервный выпад был?
Я спросил, как уйти от @t в @query. Понятно же что нельзя использовать переменну. Об этом и вопрос, как получить результат без использования переменной @t в запросе?
10 сен 15, 13:56    [18132733]     Ответить | Цитировать Сообщить модератору
 Re: Процедура sp_send_dbmail. Вложение csv, Необходимо объявить табличную переменную "@t".  [new]
Glory
Member

Откуда:
Сообщений: 104760
2viper2viper
Glory, к чему этот нервный выпад был?

К тому, что каждый ваш вопрос имеет описание в хелпе
Вам не скем поговорить что ли? Или может вы читаете с трудом ?

2viper2viper
Об этом и вопрос, как получить результат без использования переменной @t в запросе?

Любым способом, каким вы сможете обратится из отдельной сессии к нужным объектам
10 сен 15, 13:58    [18132745]     Ответить | Цитировать Сообщить модератору
 Re: Процедура sp_send_dbmail. Вложение csv, Необходимо объявить табличную переменную "@t".  [new]
2viper2viper
Member

Откуда:
Сообщений: 271
Glory
2viper2viper
Glory, к чему этот нервный выпад был?

К тому, что каждый ваш вопрос имеет описание в хелпе
Вам не скем поговорить что ли? Или может вы читаете с трудом ?


Если отвечаете за свои слова, посмотрите мои темы. Спрашивал советы.
Но честно, просто противно что либо спрашивать. Прошли бы мимо молча.

2viper2viper
Об этом и вопрос, как получить результат без использования переменной @t в запросе?

Любым способом, каким вы сможете обратится из отдельной сессии к нужным объектам[/quot]

спасибо.
10 сен 15, 14:07    [18132801]     Ответить | Цитировать Сообщить модератору
 Re: Процедура sp_send_dbmail. Вложение csv, Необходимо объявить табличную переменную "@t".  [new]
Glory
Member

Откуда:
Сообщений: 104760
2viper2viper
Если отвечаете за свои слова, посмотрите мои темы. Спрашивал советы.
Но честно, просто противно что либо спрашивать. Прошли бы мимо молча.

Вот и начните перед каждым вопросом читать хелп. Молча.
И не задавайте тупых вопросов про то, как обойти документированные способы.
10 сен 15, 14:12    [18132831]     Ответить | Цитировать Сообщить модератору
 Re: Процедура sp_send_dbmail. Вложение csv, Необходимо объявить табличную переменную "@t".  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
на выбор

IF EXISTS(SELECT * FROM cter) BEGIN

EXEC sp_send_dbmail
	@recipients =  'b@gmail.com',
	@body_format = 'HTML',
	@subject = N'Исправьте ошибку',
	@query='SELECT id, title, FIO, start, move, end FROM cter',
	@query_attachment_filename = 'bank.csv',
	@attach_query_result_as_file = 1

END


либо

IF OBJECT_ID('tempdb.dbo.#t') IS NOT NULL
	DROP TABLE #t

SELECT *
INTO #t
FROM cter

IF @@rowcount > 0 BEGIN

EXEC sp_send_dbmail
	@recipients =  'b@gmail.com',
	@body_format = 'HTML',
	@subject = N'Исправьте ошибку',
	@query='SELECT * FROM #t',
	@query_attachment_filename = 'bank.csv',
	@attach_query_result_as_file = 1

END
10 сен 15, 14:17    [18132862]     Ответить | Цитировать Сообщить модератору
 Re: Процедура sp_send_dbmail. Вложение csv, Необходимо объявить табличную переменную "@t".  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1456
2viper2viper,

используйте вместо @-таблиц #-таблицы
10 сен 15, 14:24    [18132918]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Процедура sp_send_dbmail. Вложение csv, Необходимо объявить табличную переменную "@t".  [new]
sposad
Member

Откуда:
Сообщений: 62187
AlanDenton
на выбор

IF EXISTS(SELECT * FROM cter) BEGIN

EXEC sp_send_dbmail
	@recipients =  'b@gmail.com',
	@body_format = 'HTML',
	@subject = N'Исправьте ошибку',
	@query='SELECT id, title, FIO, start, move, end FROM cter',
	@query_attachment_filename = 'bank.csv',
	@attach_query_result_as_file = 1

END


либо

IF OBJECT_ID('tempdb.dbo.#t') IS NOT NULL
	DROP TABLE #t

SELECT *
INTO #t
FROM cter

IF @@rowcount > 0 BEGIN

EXEC sp_send_dbmail
	@recipients =  'b@gmail.com',
	@body_format = 'HTML',
	@subject = N'Исправьте ошибку',
	@query='SELECT * FROM #t',
	@query_attachment_filename = 'bank.csv',
	@attach_query_result_as_file = 1

END


по второму варианту локальную времянку не видит, а на глобальной виснет и сообщение повисает в unsent
15 фев 17, 14:08    [20214141]     Ответить | Цитировать Сообщить модератору
 Re: Процедура sp_send_dbmail. Вложение csv, Необходимо объявить табличную переменную "@t".  [new]
welter
Member

Откуда:
Сообщений: 38
sposad,
используйте глобальную временную таблицу ##t
15 фев 17, 14:47    [20214318]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить