插入新行时如何向多个收件人发送电子邮件?

时间:2016-12-17 14:59:44

标签: sql sql-server database triggers

我正在使用SQL Server 2014

我有一个表A,其中包含以下列:

planNo, parcelNo, id

另一个包含这些列的表B

planNo, parcelNo, userEmail

当一个新行插入表A时,我想向userEmail发送一封电子邮件,以查找表B中具有相同parcelNo和{的所有行{1}}

2 个答案:

答案 0 :(得分:2)

评论太长了。

你知道答案,因为你已经标记了问题"触发"。当你还没有尝试写代码时,你是否要求其他人为你编写代码?你应该尝试自己。

在我看来,通过触发器发送电子邮件是危险的。我更喜欢使用存储过程的基于API的方法。触发器中的错误可能导致数据库锁定。

不是直接在表中插入行并使用数据库触发器执行电子邮件,而是调用存储过程在A中插入行,然后在存储过程中发送电子邮件。因此,存储过程看起来像这样:

create procedure usp_InsertAndEmail (
    @planNo ??,
    @parcelNo ??,
    @id
) as
begin
    declare @email varchar(255);

    insert into a(planNo, parcelNo, id)
        values (@planNo, @parcelNo, @id);

    declare cursor b_cursor for
        select email
        from table b
        where b.planNo = @planNo and b.parcelNo = @parcelNo;

    open cursor b_cursor;

    fetch next from b_cursor into @email;

    while (@@fetch_status = 0)
    begin
        -- do email send however you do it
        fetch next from b_cursor into @email;
    end;
    close b_cursor;
    deallocate b_cursor;
end;

此方法还允许您检查电子邮件中的错误。

答案 1 :(得分:0)

我猜你使用PHP?

    $requete= 'SELECT * FROM B WHERE planNo=\'.$plannumber.\' AND parcelNo=\'.$parcelnumber.\'';
$result = $bdd->query($requete);
    if($result)
                {
                    while ($donnees = $result->fetch())
                    {
                        $email=$donnees['userEmail'];
                        $header='From: Name Surname <your_email>'."\r\n";
                        $title='title of your mail';
                        $message='your message';
                        mail($email, $title, $message, $header);
                    }
                }