如何从TSQL调用webservice? (SQL SERVER 2000)

时间:2013-01-10 13:59:37

标签: sql sql-server tsql sql-server-2000

我想在SQL Server 2000中调用来自TSQL的web服务。我尝试使用以下代码:

Declare @Object as Int; 
Declare @ResponseText as Varchar(8000);
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'get','http://server/ws/service1.asmx/Test', 'false';
Exec sp_OAMethod @Object, 'send';
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT;
Select @ResponseText Resultado;
Exec sp_OADestroy @Object;

为此,我必须启用Ole Automation:

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO

在我的测试服务器上工作正常,问题是在生产服务器上运行

sp_configure 'Ole Automation Procedures', 1; 

我收到以下错误:

  

配置选项“Ole Automation Procedures”不存在,或者它可能是高级选项。

运行时

exec sp_configure 
测试服务器上的

不会在生产服务器上显示记录“Ole Automation Procedures”。

更新

我修改代码以捕获错误:

Declare @Object as Int; 
Declare @ResponseText as Varchar(8000);
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'get','http://server/ws/service1.asmx/Test', 'false';
Exec sp_OAMethod @Object, 'send';
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT;
EXEC sp_OAGetErrorInfo @Object
Select @ResponseText Resultado;
Exec sp_OADestroy @Object;

指令“sp_OAGetErrorInfo EXEC @ Object”返回:(0x8004271A )srv_convert中的错误。

根据Microsoft(link)是SqlServer的问题。因为在我的情况下,webservice的结果超过4000个字符。

如何从TSQL调用Web服务?

3 个答案:

答案 0 :(得分:1)

如果你想调用从T-SQL调用HTTP Web服务(没有SQLCLR),我可能会给你一些帮助你可以使用Object Automation扩展存储过程自动化XMLHTTP服务器对象。

Example

我建议您使用CLR或SSIS包。

答案 1 :(得分:1)

我通过以下方式解决了这个问题:
使用以下代码创建VBScript文件( callWS.vbs ):

if WScript.Arguments.Count = 1 then
    Set http = CreateObject("Microsoft.XmlHttp")
    http.open "GET", WScript.Arguments(0), FALSE
    http.send ""
    WScript.Echo http.responseText
else
    WScript.Echo "Not was provided the WS address."
end if

然后在TSQL中:

declare @Command varchar(100)
declare @RetInfo varchar(8000)
select @Command = 'cscript c:\callWS.vbs "http://server/ws/service1.asmx/Test"'
print @Command
exec @RetInfo = master.dbo.xp_cmdshell @Command
print @RetInfo

答案 2 :(得分:1)

我偶然发现同样的错误 - "(0x8004271A)srv_convert出错。"

要克服字符串限制,请使用如下所示的#tmp表:

ColourCOL

Solution Source