【发布时间】:2018-10-17 10:53:06
【问题描述】:
我以前从未使用过游标,并且在阅读时,这可能不是最好的方法,因此请务必提出建议。
我正在尝试将游标的结果集传递给查询。这是我目前所拥有的:
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 查询结果集作为游标中每个结果的电子邮件发送。例如,假设光标返回三个结果:Bob、Jim 和 Joe。我想循环运行来自光标的每个结果的@emailBody 查询,并为每个结果发送一封电子邮件。
当我按原样运行查询时,我收到一条错误消息:
Msg 22050, Level 16, State 1, Line 0 格式查询错误,可能 无效参数
消息 14661,级别 16,状态 1,程序 sp_send_dbmail,第 504 行 [批处理开始第 0 行]
查询执行失败:
消息 207,级别 16,状态 1,服务器 SERVER,第 9 行 列名无效 “鲍勃”。
消息 207,级别 16,状态 1,服务器 SERVER,第 1 行无效 列名“鲍勃”。
我不知道发生了什么。有什么想法吗?
【问题讨论】:
标签: sql sql-server tsql sql-server-2008-r2 cursor