如何从 SQL Express 2012 获取数据更改通知?
Posted
技术标签:
【中文标题】如何从 SQL Express 2012 获取数据更改通知?【英文标题】:How to get data change notifications from SQL Express 2012? 【发布时间】:2016-05-31 14:13:41 【问题描述】:我们有客户端 - 服务器应用程序,其中客户端内置在 Delphi XE4 中,服务器使用 SQL Server 2012 Express 版本。我的 delphi 应用程序(使用 WMI 处理服务器事件)可以接收来自 Express 版的数据更改通知吗?
文档说 Express 版本支持服务代理作为“仅限客户端”。
是否可以在不借助任何其他 sql server 版本的情况下使用 Express 版本实现上述功能。
【问题讨论】:
请澄清您所说的数据更改通知的含义 @TheGameiswar 很清楚 OP 正在寻找什么,而且这个词不言自明。 如果 table_x 中的任何数据因查询而发生变化(select * from table_x),那么我想收到 SQL 服务的通知。 请用一些示例更新问题 MS 知道他们在限制各种软件版本中可用的功能时在做什么。因此,如果他们说“仅限客户”,我想他们是认真的。他们的意思是另一锅鱼。您最好在 EMB 的 FireDAC 新闻组中提问:forums.embarcadero.com/forum.jspa?forumID=502,因为 FireDAC 使用服务器代理通知 iirc。 FD 的作者在那里非常活跃,如果他不知道 Express 版是否支持通知,我会感到惊讶。 【参考方案1】:是的,你可以。 Query Notifications 和 SQLDependency 在 Express 版本中功能齐全。 Working with Query Notifications 解释了如何直接从 OleDB(通过 SSPROP_QP_NOTIFICATION_TIMEOUT
、SSPROP_QP_NOTIFICATION_MSGTEXT
和 SSPROP_QP_NOTIFICATION_OPTIONS
)和从 ODBC(通过 SQL_SOPT_SS_QUERYNOTIFICATION_TIMEOUT
、SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT
和 SQL_SOPT_SS_QUERYNOTIFICATION_OPTIONS
)使用查询通知。我不知道 Delphi 是否在更高级别公开查询通知,或者您必须针对低级别 ODBC 或 OLEDB 进行编码。真正可用的选项通过 C# 等中的托管驱动程序、SQLDependency
类公开。
我在linkMartynA 中看到XE8 支持查询通知。它应该适用于 Express。
Express 的“仅限客户端”限制严格指 Service Broker 远程通信(在 SQL Server 实例之间交换消息),这是查询通知不需要的功能。
【讨论】:
谢谢。我们正在寻找能够使用查询通知的 XE8。【参考方案2】:您不能仅在 Express 版本中使用此功能。
您至少需要 Standard Edition 才能启动并运行 SQL Server Service Broker 后端。一旦您拥有一个 Standard 版本实例,其他 Express 版本实例就可以参与。
【讨论】:
这是完全错误的。查询通知使用的本地模式下的服务代理在 Express 中具有完整功能。 @RemusRusanu 我已经纠正了:-)。给人的印象是查询通知与远程通信功能相关联。以上是关于如何从 SQL Express 2012 获取数据更改通知?的主要内容,如果未能解决你的问题,请参考以下文章
尝试将 SQL Server 2012 Express 还原到 2014
如何使用实体框架在 Sql Server Express 中获取下一个序列号?
如何从 SQL Server Express 获取连接字符串?
SQL Server 2012 Express 如何从一列中提取信息并将其与具有表达式限制的另一列进行比较