首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么SQL Server CE不允许触发此触发器?

为什么SQL Server CE不允许触发此触发器?
EN

Stack Overflow用户
提问于 2012-03-15 18:15:57
回答 1查看 3.3K关注 0票数 0

我们使用的是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如何知道不是同步一部分的表具有触发器,该触发器触发存储过程以发送电子邮件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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代理作业来检查队列表并以这种方式发送邮件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9717689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档