Я никогда раньше не работал с курсорами, и после прочтения это может быть не самым лучшим подходом, поэтому во что бы то ни стало вносит предложения.
Я пытаюсь передать результирующий набор курсора взапрос.Вот что у меня есть:
DECLARE @PM varchar(50),
@c1 as CURSOR
SET @c1 = CURSOR FOR
SELECT PM
FROM PMtable
OPEN @c1;
FETCH NEXT FROM @c1 INTO @PM;
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @emailBody nvarchar(max)
SET @emailBody = 'SELECT * FROM othertable WHERE PM = ' + @PM + ' ORDER BY PM';
EXEC msdb.dbo.sp_send_dbmail
@recipients = 'me@me.com',
@subject = 'test',
@query = @emailBody;
FETCH NEXT FROM @c1 INTO @PM;
END
CLOSE @c1;
DEALLOCATE @c1;
Идея состоит в том, чтобы отправлять набор результатов запроса @emailBody в виде электронной почты для каждого результата в курсоре.Например, скажем, курсор возвращает три результата: Боб, Джим и Джо.Я хочу выполнить цикл @emailBody для каждого результата из курсора и отправить электронное письмо для каждого результата.
Когда я запускаю запрос как есть, я получаю сообщение об ошибке:
Сообщение 22050, Уровень 16, Состояние 1, Строка 0 Ошибка запроса форматирования, возможно, недопустимые параметры
Сообщение 14661, Уровень 16, Состояние 1, Процедура sp_send_dbmail, Строка 504 [Стартовая строка 0]
Не удалось выполнить запрос:
Сообщение 207, Уровень 16, Состояние 1, Сервер СЕРВЕР, Строка 9 Неверное имя столбца «Боб».
Сообщение 207, Уровень 16, Состояние 1, Сервер СЕРВЕР, Строка 1 Неверное имя столбца «Боб».
Понятия не имею, что происходит.Есть идеи?