【发布时间】:2020-04-04 02:46:56
【问题描述】:
我在 SQL Server 中有一个数据库,其中有一个 user 表,其中包含 3 列:姓名、出生日期和电子邮件。
我有一个存储过程,它会遍历这个表来寻找今天过生日的人,并向他发送一封祝贺电子邮件,到目前为止它的工作时间是 100。
但是,我想在向数据库的所有用户(生日除外)发送电子邮件的同一过程中添加,通知他们 x 人今天过生日。
这是我当前的 SQL Server 代码:
CREATE PROCEDURE spSendEmail
AS
DECLARE @email nvarchar(128)
DECLARE @name nvarchar(128)
DECLARE @Date date
SELECT
GETDATE(),
MONTH(GETDATE()), DAY(GETDATE()), YEAR(GETDATE())
DECLARE email_cursor CURSOR FOR
SELECT u.name, u.email
FROM dbo.users u
WHERE MONTH(u.dateofbirth) = MONTH(GETDATE())
AND DAY(u.dateofbirth) = DAY(GETDATE())
OPEN email_cursor
FETCH NEXT FROM email_cursor INTO @name, @email
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @email
DECLARE @subject nvarchar(255)
DECLARE @Bodytext nvarchar(512)
SET @BodyText = @Name + '' + 'we wish you happy birthday'
SET @Subject = 'Happy Birthday'
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Birthday Alert',
@recipients = @email,
@body = @Bodytext,
@subject = @subject;
FETCH NEXT FROM email_cursor INTO @name, @email
END
CLOSE email_cursor
DEALLOCATE email_cursor
【问题讨论】:
-
您只需将 where 子句更改为
not(month... and day... ) -
让我们重新表述一下这种方法!我想将重要的个人信息泄露给可能认识或不认识某些人的陌生人。这些特定个人也没有要求或同意此类个人信息的泄露。在您考虑如何执行此操作之前,请考虑您是否应该执行此操作。
-
此过程适用于小型组织。他们并不陌生
标签: sql-server stored-procedures sql-server-2017