我有2个表,Products
和Gallery
Products
-----------
ID
Item_Name
Gallery
----------
Item_Id
Description
我试图在Gallery上编写一个简单的INSERT触发器来执行此操作 - 每次在Gallery中执行INSERT都会发送一封电子邮件。
使用此:
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
答案 0 :(得分:1)
当您的触发器位于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
这将返回新插入的描述以及相应的项目名称,但仅当该项目存在于Products
中时才会生效。
然后,您可以设置@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
答案 1 :(得分:0)
你几乎已经这样做了:
select @body += CHAR(13) + CHAR(10) + RTRIM(Description)
FROM inserted a
inner join dbo.Products b
on a.Item_Id=b.ID
您需要将inserted
表用作JOIN
表。它与dbo.Gallery
表具有相同的结构,但只保留新插入的记录。