【发布时间】:2014-09-04 05:20:58
【问题描述】:
DECLARE
@id nvarchar(MAX),
@Counter int,
@CheckCount int
DECLARE CC1 CURSOR READ_ONLY
FOR
SELECT Ename, Ecount
FROM TestDB.dbo.TestEmail
OPEN CC1
FETCH NEXT FROM CC1 INTO @id, @Counter
WHILE @@FETCH_STATUS = 0
BEGIN
Begin
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Bob',
@recipients = @id,
@body = 'The stored procedure finished successfully. #$%',
@subject = 'Automated Success Message' ;
update TestDB.dbo.TestEmail
set Ecount = Ecount + 1
where Ename = @id
print @id
END
Select
@CheckCount = Ecount
from TestDB.dbo.TestEmail
where Ename = @id
print @CheckCount
If @CheckCount > 3
Begin
exec msdb.dbo.sp_update_job @job_id = N'6a81d6b3-af2d-4a27-b688-b9c69098f840', @enabled = 0
return
PRINT 'Count reached 3+'
End
FETCH NEXT FROM CC1 INTO @id, @Counter
END
CLOSE CC1
DEALLOCATE CC1
我有一个表TestEmail 有两列Ename, Ecount。通过使用此表,我正在尝试向用户发送电子邮件。如果Ecount 大于 3,则脚本退出,并且没有任何反应。
一个用户只能收到 3 次电子邮件。但是我的功能失败了,无法弄清楚我哪里出错了。我的脚本没有抛出任何错误,但也不起作用。
【问题讨论】:
-
这里有一个线索 - 你认为return 有什么作用?我认为马克的编辑说得很清楚......
-
return 立即退出一切。
-
现在可以了。 :) 如果您在用户电子邮件数量大于三个时提供有关退出此脚本的更多提示,我将不胜感激。我很感谢马克。
标签: tsql stored-procedures sql-server-2008-r2