SQL CLR调用的替代方法是什么?

时间:2018-09-18 06:47:01

标签: .net sql-server sql-server-2016 sqlclr

我正在将SQL Server 2016用于.Net应用程序[框架4.5]。我在SQL中使用CLR调用,以便根据CRUD操作将一些数据传递到客户端/浏览器。

例如:SignalR通知/调用,使用程序集的Web服务调用

我们是否可以使用SQL Server CLR进行直接的Web服务调用。任何建议/帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

如果您可以基于数据库中发生的事情进行调用,那么@lasse的建议是让服务检索数据并进行必要的调用是一个好主意。

除此以外,SQLCLR可能是您最好的选择。我知道SQL Server Service Broker具有外部调用的概念,但是几年前,我发现它的性能并不高。

第三个选择是使用SQL Server机器学习服务及其Python功能来调出数据库并让您的调用在外部执行。但是,这将需要SQL2017。在2016年,您可以使用R,但我不知道R是否具有执行所需功能的能力。

希望这会有所帮助!

尼尔斯

答案 1 :(得分:0)

我们的一位客户拥有类似的基础架构,可以在2个不同的系统之间进行通信。

在表触发器内使用SQLCLR的第一种方法

表上的触发器调用SQLCLR过程,该过程发出HTTP Web API请求以发布数据。

发现问题 :由于它是一个完整的事务范围,因此前端触发的CRUD操作开始等待,直到SQLCLR发布消息为止。

第二种方法是使SQLCLR过程实现异步HTTP请求

使用线程名称空间将SQLCLR过程作为异步方法。

发现问题 :即使该方法也引起了问题,并且在端点不可用时丢失了消息。

使用SQL SERVICE BROKER作为SQLCLR的包装的第三种方法

实现了SQL Server代理,以中断触发消息和发布消息之间的事务。并从SQL服务代理发出HTTP请求以激活存储过程。这解决了该问题,因为它在添加到队列后中断了事务。

优点 使用服务代理作为SQLCLR的包装,您可以中断事务,消息存储在队列中,永不丢失,我们也可以使用服务代理 如果需要,可以在2个不同的SQL Server实例之间进行通信。