如何在SQL Server中编写轮询服务?

如何在SQL Server中编写轮询服务?,sql,sql-server,Sql,Sql Server,我有两张表employee和department 员工 Id, Name, JoiningDate, SpecialRegistrationDone, DepartmentId 部门 DepartmentId, Name 有一个特殊的部门,其部门ID=2和Name=“AI” 有一个Java服务将数据推送到Employee和Department表中 现在,我必须编写一个满足条件的轮询服务(轮询频率为15分钟一次) select e.* from Employee e inner join D

我有两张表
employee
department

员工

Id, Name, JoiningDate, SpecialRegistrationDone, DepartmentId
部门

DepartmentId, Name
有一个特殊的部门,其部门ID=2和
Name=“AI”

有一个Java服务将数据推送到
Employee
Department
表中

现在,我必须编写一个满足条件的轮询服务(轮询频率为15分钟一次)

select e.* 
from Employee e
inner join Department d on e.DepartmentId = d.DepartmentId
                        and e.DepartmentId = 2
                        and e.JoiningDate > cast(GetDate() as date)
                        and e.specialRegistrationDone = 0
如果提取了任何记录,那么请致电Web服务,并将员工详细信息传递给该服务

编写的一种方法是编写一个Java服务,它轮询数据库并执行此查询,获取结果并调用web服务以获取resultset


我正在研究一种仅在SQL Server端创建服务的方法,该方法执行查询并调用web服务。我该怎么写呢?在SQL Server 2014中是否可能实现此目标?

以下是一种实现您想要实现的目标的方法:

第1步:

步骤2:在存储过程中写入业务逻辑以检查数据

第3步:调用/发布具有所讨论的CLR集成的web服务

或者使用

不建议以您计划的方式实施。数据库应该只关注存储数据

相反,您应该让CRON服务定期运行您的应用程序。然后从应用程序查询数据库并根据需要发布到web服务


或者,在应用程序中运行计划服务,应用程序可以如上所述检查数据库。是一个可以用于此目的的库。

这只是一个想法,但实现一个cron作业调用负责查询数据库的服务器端脚本,并在需要时调用web服务,不是更容易吗?您不能在t-SQL中编写任何东西来将数据推送到web服务。它必须是外部的东西。虽然可以使用system com存储过程,但这是不可靠的,不受支持的。换句话说,数据库不应该调用长时间运行、阻塞的外部服务,如web服务。另一方面,一个计划的作业可以很容易地做到这一点。数据库将如何限制对该服务的请求以避免淹没它?它将如何处理错误响应?它将如何重试失败的请求?对于小型控制台应用程序或脚本来说,所有这些都是微不足道的。在SQL中这样做是不可能的,因为我使用SSI、定制的命令行工具和计划作业每15分钟轮询一百万行表,并调用航空公司web服务获取新数据,将其存储到数据库中,并将所有这些内容组合在一起。调用web服务HttpClient、使用Polly实现重试、使用TPL数据流通过节流创建处理管道都很容易。即使在T-SQL中进行一个HTTP调用,甚至使用SQLCLR都会非常棘手,更不用说重试、并发请求和节流了。Hanks将尝试SQL server service broker方法