Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自SQL的Web服务_Sql_Web Services_Tsql - Fatal编程技术网

来自SQL的Web服务

来自SQL的Web服务,sql,web-services,tsql,Sql,Web Services,Tsql,我是否可以从存储过程调用远程Web服务并使用返回的值?如果您使用的是SQL 2005/2008,如果您能够安装并运行这些值,则可以从CLR存储过程执行此操作。有关更多信息: Service Broker可能会提供您在这里寻找的那种功能。正如AntiSanta所说,使用CLR存储过程这是可能的。真正的问题是你能否完全避免它。从存储过程调用web服务会让人感觉颠倒。理想情况下,您应该有其他服务/应用程序/层来调用存储过程和web服务。存储的过程可能会返回web服务的参数值,并且在WS调用完成后提交本

我是否可以从存储过程调用远程Web服务并使用返回的值?

如果您使用的是SQL 2005/2008,如果您能够安装并运行这些值,则可以从CLR存储过程执行此操作。有关更多信息:


Service Broker可能会提供您在这里寻找的那种功能。

正如AntiSanta所说,使用CLR存储过程这是可能的。真正的问题是你能否完全避免它。从存储过程调用web服务会让人感觉颠倒。理想情况下,您应该有其他服务/应用程序/层来调用存储过程和web服务。存储的过程可能会返回web服务的参数值,并且在WS调用完成后提交本地事务


从长远来看,这将使调试、部署和支持更加简单,并使存储过程和web服务之间的直接引用解耦。

在SQL Server 2000及更高版本上(如果未启用CLR),您可以通过存储过程使用COM(
sp_OACreate
sp_OAMethod
等)如果您的web服务已有COM包装器。

以下是我的代码

exec @hr = sp_OACreate 'MSXML2.ServerXMLHttp', @obj OUT  
if @hr < 0 begin Raiserror('sp_OACreate MSXML2.ServerXMLHttp failed',16,1) 
return end  
exec @hr = sp_OAMethod @obj, 'Open', NULL, 'GET', @UrlString, false  
if @hr <0 begin set @msg = 'sp_OAMethod Open failed' goto eh end  
exec @hr = sp_OAMethod @obj, 'send'  
if @hr <0 begin set @msg = 'sp_OAMethod Send failed' goto eh end  
exec @hr = sp_OAGetProperty @obj, 'status', @status OUT  
if @hr <0 begin set @msg = 'sp_OAMethod read status failed' goto eh end  
if @status <> 200 begin set @msg = 'sp_OAMethod http status ' +str(@status) goto eh end  
exec @hr = sp_OAGetProperty @obj, 'responseText', @response OUT  
if @hr <0 begin set @msg = 'sp_OAMethod read response failed' goto eh end  
exec @hr = sp_OADestroy @obj  
select @response  

你还有其他建议吗?我有一个带有sql后端的Access前端(用VBA编写adp)程序。我想从access调用Web服务,但不想使用com插件。我正在呼叫远程服务器(总部)上的一个webserivce,它会给我一个采购订单号。
exec @hr = sp_OADestroy @obj  
Raiserror(@msg, 16, 1)  
Return