Sql 数据更改时的电子邮件触发器

Sql 数据更改时的电子邮件触发器,sql,sql-server-2008,Sql,Sql Server 2008,我创建了一个触发器,当字段Aantal更改时发送电子邮件,但问题是它无法将删除和插入的数据放入电子邮件正文中。 我被告知这是因为删除和插入包含多行。 请建议“获取包含更改数据的行”的解决方案 我正在使用SQLServer2008R2 代码: 你知道这会触发每批而不是每行的火灾,对吗?这总的来说是个坏主意。将数据转储到另一个表中,编写每分钟检查该表的作业,并让其发送电子邮件 您希望触发器尽可能快,并且不发送电子邮件 另见: 您的另一个选项(,这也是一个坏主意)是在触发器中的已删除和插入的表上循环,

我创建了一个触发器,当字段Aantal更改时发送电子邮件,但问题是它无法将删除和插入的数据放入电子邮件正文中。 我被告知这是因为删除和插入包含多行。 请建议“获取包含更改数据的行”的解决方案

我正在使用SQLServer2008R2

代码:


你知道这会触发每批而不是每行的火灾,对吗?这总的来说是个坏主意。将数据转储到另一个表中,编写每分钟检查该表的作业,并让其发送电子邮件

您希望触发器尽可能快,并且不发送电子邮件

另见:

您的另一个选项(,这也是一个坏主意)是在触发器中的已删除和插入的表上循环,并为每一行发送电子邮件

您还应该使用
sp\u send\u dbmail
而不是
xp\u sendmail
,因为您是在2008年,xp\u sendmail已被弃用

仅供参考

像这样的

SET @BestellingID               = (SELECT BestellingID FROM inserted)
SET @CategorieID                = (SELECT CategorieID FROM inserted)    
SET @SubCategorieID             = (SELECT SubCategorieID FROM inserted)
可通过1选择完成

  SELECT    @BestellingID = BestellingID,
        @CategorieID = CategorieID,
        @SubCategorieID = SubCategorieID 
FROM inserted

无需执行3个查询…这对您没有帮助,因为您必须为多行编码,但只是为了向您表明,您可以使用1个select分配多个变量。您知道触发每批而不是每行触发吗?这总的来说是个坏主意。将数据转储到另一个表中,编写每分钟检查该表的作业,并让其发送电子邮件

  SELECT    @BestellingID = BestellingID,
        @CategorieID = CategorieID,
        @SubCategorieID = SubCategorieID 
FROM inserted
您希望触发器尽可能快,并且不发送电子邮件

另见:

您的另一个选项(,这也是一个坏主意)是在触发器中的已删除和插入的表上循环,并为每一行发送电子邮件

您还应该使用
sp\u send\u dbmail
而不是
xp\u sendmail
,因为您是在2008年,xp\u sendmail已被弃用

仅供参考

像这样的

SET @BestellingID               = (SELECT BestellingID FROM inserted)
SET @CategorieID                = (SELECT CategorieID FROM inserted)    
SET @SubCategorieID             = (SELECT SubCategorieID FROM inserted)
可通过1选择完成

  SELECT    @BestellingID = BestellingID,
        @CategorieID = CategorieID,
        @SubCategorieID = SubCategorieID 
FROM inserted

无需执行3个查询…这对您没有帮助,因为您必须为多行编码,但只是为了向您显示,您可以使用1个select来分配多个变量,因为您可以修改多行数据,因此无法按要求仅获取更改的数据

  SELECT    @BestellingID = BestellingID,
        @CategorieID = CategorieID,
        @SubCategorieID = SubCategorieID 
FROM inserted
例如,如果执行以下操作:

UPDATE MyTable
SET Col2 = Col2 + 1
每行Col2将增加1。您希望哪一行作为示例

您可以在选择中使用
TOP 1
子句将值分配给顶部的变量,但唯一的方法是使用
WHILE
循环或光标每行发送一封电子邮件,这可能会产生大量电子邮件


此外,这通常是一种非常糟糕的做法,因为每次更新/删除/插入时,您的所有事务都将通过此电子邮件过程触发。

无法按照您的要求仅获取更改的数据,因为您可以修改多行

例如,如果执行以下操作:

UPDATE MyTable
SET Col2 = Col2 + 1
每行Col2将增加1。您希望哪一行作为示例

您可以在选择中使用
TOP 1
子句将值分配给顶部的变量,但唯一的方法是使用
WHILE
循环或光标每行发送一封电子邮件,这可能会产生大量电子邮件


此外,这通常是一种非常糟糕的做法,因为每次更新/删除/插入时,您的所有交易都会在此电子邮件过程中触发。

您可能还需要更改该电子邮件地址,垃圾邮件发送者会爬网类似的网站以获取电子邮件地址您也可能需要更改该电子邮件地址,垃圾邮件发送者会抓取这样的网站来获取电子邮件地址