Sql server 2008 r2 查询以向多个用户发送邮件及其对应的票证

Sql server 2008 r2 查询以向多个用户发送邮件及其对应的票证,sql-server-2008-r2,Sql Server 2008 R2,我有一个表,其中列出了车票所有者和分配给他们的高优先级车票 例如: 我需要使用sp_send_dbmail从sql server向John发送邮件,并在一封邮件中分配给他所有票证。这是一个巨大的表,所以我希望用一封邮件将分配的票证发送给用户,而不是每个票证发送一封邮件。 任何帮助都将不胜感激。非常快速的谷歌搜索将为您提供所需的所有信息: 此页面将准确地告诉您需要知道的内容。这应该可以做到这一点 SET NOCOUNT ON; --sample of your tickets table C

我有一个表,其中列出了车票所有者和分配给他们的高优先级车票

例如:

我需要使用sp_send_dbmail从sql server向John发送邮件,并在一封邮件中分配给他所有票证。这是一个巨大的表,所以我希望用一封邮件将分配的票证发送给用户,而不是每个票证发送一封邮件。
任何帮助都将不胜感激。

非常快速的谷歌搜索将为您提供所需的所有信息:


此页面将准确地告诉您需要知道的内容。

这应该可以做到这一点

SET NOCOUNT ON;

--sample of your tickets table
CREATE TABLE #Tickets(
    TicketId INT IDENTITY, 
    TicketOwner VARCHAR(100),
    TicketDetails VARCHAR(MAX)
    )
;

--some sample values
INSERT INTO #Tickets(
    TicketOwner, 
    TicketDetails
    ) 
VALUES
    ('John', 'This is the first ticket'), 
    ('John', 'This is the second ticket'), 
    ('Jeremy', 'This is the third ticket')
;

--gets the dense_rank so you can iterate through the list of distinct users
SELECT  
     TicketId, 
     TicketOwner, 
     TicketDetails, 
     DENSE_RANK() OVER (ORDER BY TicketOwner) AS RowNum
INTO #Temp
FROM #Tickets
ORDER BY TicketOwner, TicketId
;

--holds the details of each email
DECLARE 
    @RowNum INT = (SELECT MAX(RowNum) FROM #Temp),
    @MySubject VARCHAR(100) = '',
    @MyBody VARCHAR(MAX) = ''
;

--iterate through distinct TicketOwnders by using the dense rank value above
WHILE @RowNum > 0
BEGIN
    --assign variables
    SELECT  @MySubject = TicketOwner + '''s tickets:',
            @MyBody = @MyBody + 'Ticket #' + CAST(TicketId AS VARCHAR(10)) + ': ' + TicketDetails + CHAR(10) + CHAR(13)
    FROM #Temp
    WHERE RowNum = @RowNum
    ;

    --send mail
    EXEC msdb.dbo.sp_send_dbmail
        @recipients = 'jgiaco@fanatics.com',
        @subject = @MySubject,
        @body = @MyBody
    ;

    SET @RowNum = @RowNum - 1;
    SET @MyBody = '';
    SET @MySubject = '';
END
;

是的,我知道。我知道从sp_send_dbmail发送的过程。但是我需要一个查询,将分配给用户的所有票证通过一封邮件发送给用户,而不是每个票证发送一封邮件。然后,您需要在问题中发布您迄今为止尝试过的内容,我将更新答案。