我们使用的是SQL Server CE数据库。我知道使用SQL Server CE数据库的触发器类型有一定的限制。例如,SQL Server CE表上的触发器不能调用存储过程,但它可以更新/插入到另一个表中。
我们需要的是一个触发器,当对表进行修改(插入/更新/删除)时发送电子邮件通知。我们知道,如果我们直接在表上设置触发器来发送电子邮件(EXEC msdb.dbo.sp_send_dbmail),那么当您尝试推送到表时将会收到错误消息。显然,SQL Server CE不支持在可触发存储过程的跟踪表上使用触发器。
为了解决这个问题,我们在表上设置了一个触发器,将一行插入到另一个表(_table_changes)中,该表不作为CE同步的一部分进行跟踪。在这个表(_table_changes)上,我们设置了一个触发器来发送电子邮件通知,我们希望这可以解决被跟踪的CE表触发器无法触发存储过程以及发送电子邮件的问题。
但是,即使该表不是推送/拉取同步的一部分,如果我们在其上启用电子邮件触发器,同步也不会起作用。为什么会这样呢?CE如何知道不是同步一部分的表具有触发器,该触发器触发存储过程以发送电子邮件?
发布于 2012-03-15 18:24:10
我认为表是否作为CE同步的一部分被跟踪并不重要。
SQL Server Compact Edition 4.0不支持触发器
Differences Between SQL Server Compact and SQL Server
编辑
根据this MSDN article的说法,SQL Server CE中的RDA允许在RDA从中提取数据的SQL Server表上使用触发器。它还指出,对于被跟踪的表,可以在将更改推回到SQL Server时执行SQL Server触发器。
触发器。SQL Server Compact Edition不支持触发器。但是,触发器可以驻留在RDA从中提取数据的SQL Server表中。对于跟踪表,可以在将更改推回到SQL Server时执行SQL Server触发器。您可能必须在触发器逻辑中指定SET NOCOUNT ON。这表示不返回受影响的行数,因为响应“没有行受到影响”会导致RDA Push方法出错。
我会检查您是否在触发器中使用了SET NOCOUNT ON。
话虽如此,如上所述,SQL Server CE中不支持使用触发器。
也许更好的解决方案是为需要发送的电子邮件创建一个队列表。当此数据从SQL CE推送回SQL Server时,您可以安排一个SQL代理作业来检查队列表并以这种方式发送邮件。
https://stackoverflow.com/questions/9717689
复制相似问题