关于数据更改的SQL Advance通知?

时间:2016-09-08 05:45:19

标签: .net sql-server sqlclr smo

当某些表格中的某些数据发生变化时,我需要通知我的用户。

为此,我知道我可以定义一个触发器来在另一个表中插入一些数据(tb_notification),并有一个计时器(在.NET应用程序中)来检查该表并向用户显示一些消息。

这是一个解决方案。

还有另一个解决方案是 SQLCLR SQL SMO ,还是其他什么?

  

我不太了解 SQLCLR SQL SMO ,我正在寻找解决方案来选择解决此问题的最佳方法。

1 个答案:

答案 0 :(得分:1)

决定如何最好地通知用户的大部分内容取决于您所谈论的通知的类型。但是,对于通知,我不认为 SMO 会为您做任何事情,因为它实际上更容易与元数据进行一般交互。

如果您只想向用户发送电子邮件,则应通过T-SQL触发器调用sp_send_dbmail。该系统存储过程通过Service Broker异步运行,因此它不会(至少不应该)阻止DML语句。

如果需要调用Web服务,可以通过SQLCLR触发器或调用SQLCLR函数/存储过程的T-SQL触发器来执行此操作。这里的缺点是,当Web服务调用等待响应时,DML语句挂起的可能性更大,甚至等待有机会发出请求(取决于您如何配置最大连接)。

您还可以选择将T-SQL触发器转储必需信息放入队列表中,然后每隔一分钟运行一次SQL Server代理作业来处理该队列表中的记录。确保在记录完成后删除记录"处理"。此选项自然是异步的,因此通过SQLCLR进行Web服务调用的风险要小得多。或者这种方法可以与sp_send_dbmail结合使用,以便您拥有" instant"电子邮件通知 plus 能够对队列表中的数据执行更通用的操作,例如将其发送到公共审计数据库,以便可以添加UI以获得更多"全局& #34;通过你的应用程序了解许多人可以看到的变化。