【发布时间】:2015-08-04 18:22:31
【问题描述】:
我正在使用游标在 SQL Server 中发送时事通讯。一切正常,除了第一封电子邮件没有 html。
这是存储过程:.....
DECLARE
@html varchar(max)
SET @html = (SELECT html from NewsLetter where nLID=@nLID)
DECLARE crsEmailList CURSOR FOR
SELECT email, ListID from lists where category=@Category AND (DLC < DATEADD(DAY, -1,GETDATE()) OR DLC IS NULL)
OPEN crsEmailList
FETCH NEXT FROM crsEmailList INTO @email, @ListID
while @@FETCH_STATUS = 0
BEGIN
DECLARE @UniqueKey varchar(20),
@UnSubscribeURL varchar(200),
@ClickURL varchar(200)
SET @UnSubscribeURL='<a href=''http://.../userfiles/OHP/UnSubscribe.aspx?listID=' + convert(varchar, @ListID) + '''>Unsubscribe</a>'
SET @ClickURL='<a href=''http://.../userfiles/OHP/clicked.aspx?Key=' + convert(varchar, @UniqueKey ) + '&URL='
EXEC [register_system_email_audits] @ListID, @email, @Date, @UniqueKey output
SET @html = (SELECT html from NewsLetter where nLID=@nLID)
SET @html = Replace(@html,'[keyvalue]', @UniqueKey)
SET @html = Replace(@html,'<a href=\''',@ClickURL)
SET @html = Replace(@html,'[UnSubscribe]', @UnSubscribeURL )
SET @html = Replace(@html,'[date]', DATENAME(month, getdate()) )
EXEC msdb.dbo.sp_send_dbmail
@profile_Name ='Local Server',
@recipients= @email ,
@subject = @Subject,
@body = @html,
@body_format='HTML'
FETCH NEXT FROM crsEmailList INTO @email, @ListID
END
我尝试将 SET @html = (SELECT html from NewsLetter where nLID=@nLID) 行移动到不同的位置,但没有积极的结果。
【问题讨论】:
-
@nLID 甚至不会在你的光标内改变,所以看起来你甚至不需要每次都获取它
-
如果我每次都没有获取它,html不会改变。
-
实际上,您确实在循环内运行了一个查询以在每次迭代时设置@html。
标签: sql-server stored-procedures cursor