代码之家  ›  专栏  ›  技术社区  ›  nordscan

触发使用内部联接发送邮件

  •  0
  • nordscan  · 技术社区  · 7 年前

    我有两张桌子, Products Gallery

    Products
    -----------
    ID
    Item_Name
    
    Gallery
    ----------
    Item_Id
    Description
    

    我试着在Gallery上写一个简单的插入触发器来实现这一点——每次插入Gallery时,都会发送一封电子邮件。

    使用此选项:

    CREATE TRIGGER dbo.whatever
    ON dbo.wherever
    FOR INSERT
    AS
    BEGIN
        SET NOCOUNT ON;
    
        DECLARE @body NVARCHAR(MAX) = N'';
    
        SELECT @body += CHAR(13) + CHAR(10) + RTRIM(Description) FROM inserted;
    
        IF EXISTS (SELECT 1 FROM inserted WHERE speed > 100)
        BEGIN
            EXEC msdb.dbo.sp_send_dbmail
              @recipients = 'whoever@yourcompany.com', 
              @profile_name = 'default',
              @subject = 'At least one person was speeding', 
              @body = @body;
        END
    END
    GO
    

    但是如何提高 @BODY 所以我可以用 Description from Gallery Item_Name from Products ??

    有现成的查询,但不知道如何组合

    select a.Item_Name, b.Description
    FROM dbo.Gallery a
    inner join dbo.Products b on a.Item_Id=b.ID
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   William    7 年前

    因为你的扳机在 Gallery 表,您只需加入 Inserted 表格收件人 Products 若要获得所需的结果,请假设当前连接正确。

    SELECT P.Item_Name, I.Description
    FROM Inserted AS I
    INNER JOIN dbo.Products AS P ON I.Item_Id = P.ID
    

    产品 .

    然后可以设置 @body 像这样;

    SELECT @body += CHAR(13) + CHAR(10) + 'Item Name: ' + P.Item_Name + ', Description: ' + RTRIM(I.Description)
    FROM Inserted AS I
    INNER JOIN dbo.Products AS P ON I.Item_Id = P.ID
    
        2
  •  0
  •   gotqn user3521065    7 年前

    你几乎做到了:

    select @body += CHAR(13) + CHAR(10) + RTRIM(Description) 
    FROM inserted a
    inner join dbo.Products b 
        on a.Item_Id=b.ID
    

    inserted 表作为a JOIN 桌子它的结构与您的 dbo.Gallery 表,但只保存新插入的记录。