早上好,我有一个名为Ticket的表,其中已注册了几张票,每张都有一个状态:
1 =已接受,2 =已分配,3 =正在关注,4 =已出席,5 =同意。
我想执行一个存储过程,在该过程中,我仅向状态4的票证发送邮件,也就是说,我的票证的状态为4,exec sp_sendmail .
处于激活状态
然后,我将每隔30分钟将其用作作业,检查它是否仍处于该状态,如果它处于状态4,它将再次发送邮件,一旦将状态4更改为5,它将不发送任何内容,它将被关闭。
答案 0 :(得分:0)
基本上,您将在工作中使用类似的内容。
exec sp_send_dbmail
@profile_name = 'your_mail_profile'
,@recipients = 'you@email.com'
,@subject = 'Attended'
,@query = 'select * from yourTable where [status] = 4'
--,@attach_query_result_as_file = 1
--,@query_attachment_filename = 'somefile.csv'
查看其他选项in the docs ...并进行相应的调整。
答案 1 :(得分:0)
类似这样的事情,在票证列表中循环并发送电子邮件。不过,请注意以下几点:首先,如果您尝试一次发送太多邮件,那么您的电子邮件提供商可能会开始丢弃它们,因此可能在消息之间放置{pre} WAITFOR DELAY '00:00:02'{pre}延迟。另外,您可以查看sp_send_dbmail中的查询选项,而不是为每张票发送一封电子邮件:您可以通过电子邮件发送当前所有4张票的单个列表。这取决于您的需求。
CREATE PROCEDURE dbo.SendTicketAttendedEmails
AS
BEGIN
DECLARE @MailList TABLE(TicketID INT, SendTo VARCHAR(255))
DECLARE @ThisTicketID INT
, @MailMessage NVARCHAR(2000)
, @MailSubject NVARCHAR(255)
, @SendTo VARCHAR(255)
INSERT INTO @MailList
([TicketID], [SendTo])
SELECT t.[ID], u.[UserEmail]
FROM dbo.YourTicketTable t
JOIN dbo.YourUserTable u
ON t.UserCreated = u.ID
WHERE [StatusID] = 4
WHILE EXISTS(SELECT 1 FROM @MailList)
BEGIN
SELECT TOP(1) @ThisTicketID = [TicketID]
, @MailSubject = 'Ticket ' + CAST([TicketID] AS VARCHAR(10)) + ' is in status 4.'
, @MailMessage = 'Please review, or whatever, ticket ' + CAST([TicketID] AS VARCHAR(10)) + '.'
, @SendTo = COALESCE([SendTo], 'yourEmailAddress@InCase.Missing')
FROM @MailList
ORDER BY [TicketID];
DECLARE @mailitem_id INT ;
EXEC [msdb].dbo.[sp_send_dbmail]
@profile_name = 'SomeDBMailProfileName' -- sysname
, @recipients = @SendTo -- varchar(max)
, @subject = @MailSubject -- nvarchar(255)
, @body = @MailMessage -- nvarchar(max)
, @mailitem_id = @mailitem_id OUTPUT -- int
, @from_address = 'you@you.com' -- varchar(max)
, @reply_to = 'you@you.com' -- varchar(max)
DELETE @MailList
WHERE [TicketID] = @ThisTicketID
END
END