我们可以从TSQL代码调用Web服务吗?
有没有一种方法可以从TSQL存储过程或者函数调出到Web服务?
解决方案
回答
它们不在T-SQL代码本身中,而是在SQL Server 2005及更高版本中启用了编写CLR存储过程的能力,这些过程本质上是.NET代码中的功能,然后将其公开为存储过程以供使用。我们可以轻松掌握大部分.NET框架,因此,我可以看到通过它使用Web服务的可能性。
这里要详细讨论有些冗长,但这是指向该主题的MSDN文章的链接。
回答
在早期版本的Sql中,我们可以使用扩展存储的proc或者xp_cmdshell来封装并调用Web服务。
并不是说这两个听起来像是一个不错的体系结构,但是有时候我们不得不做一些疯狂的事情。
回答
当然可以,但这是一个糟糕的主意。
由于网络服务呼叫可能要花费任意时间,并且会随机失败,具体取决于当时网络上正在玩多少次反击游戏,因此我们无法确定这将花费多长时间。
至少,在构建XML,将HTTP请求发送到远程服务器时,我们大概需要等待半秒钟的时间,然后远程服务器必须解析XML并将响应发送回去。
- 无论哪个应用程序执行了导致网络服务启动的" INSERT INTO BLAH"查询,都将不得不等待它完成。除非这是仅在后台执行的日常任务之类的事情,否则应用程序的性能将一飞冲天
- 调用Web服务的代码在SQL Server内部运行,并耗尽其资源。由于等待HTTP请求将花费很长时间,因此我们最终将消耗大量资源,这将再次损害服务器的性能。
回答
同意这不是要做的事情,但是有时候我们必须做一些我们理想中不喜欢做的事情。在这种情况下,我最终将Web服务功能重写为sql函数以完成相同的任务。
感谢所有的链接和建议。
回答
我们可以使用嵌入式VB对象来完成此操作。
首先,我们将创建一个类型为" MSXML2.XMLHttp"的VB对象,并将此对象用于所有查询(如果每次都重新创建该对象,则会导致性能下降)。
然后,将该对象和一些参数输入到存储过程中,该存储过程在对象上调用sp_OAMethod。
抱歉,示例不精确,但是Google进行了快速搜索,应该可以发现vb-script方法是如何完成的。
--
但是CLR版本要好得多。
调用Web服务的问题在于它们无法跟上数据库引擎的步伐。在无法跟上的地方会出现很多错误。
请记住,Web服务每次都需要一个新的连接。多样性发挥作用。我们不想打开5000个套接字连接来服务表上的函数调用。多数民众赞成在!
在那种情况下,我们必须创建一个自定义的聚合函数,并使用THAT作为参数传递给Web服务,这将返回结果集……然后我们必须对此进行整理。这确实是一种获取数据的尴尬方式。
回答
如果我们正在使用sql 2000兼容级别,并且无法进行clr集成,请参见http://www.vishalseth.com/post/2009/12/22/Call-a-webservice-from-TSQL-(存储过程) -using-MSXML.aspx