Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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
如何从TSQL调用webservice?(SQL SERVER 2000)_Sql_Sql Server_Tsql_Sql Server 2000 - Fatal编程技术网

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

如何从TSQL调用webservice?(SQL SERVER 2000),sql,sql-server,tsql,sql-server-2000,Sql,Sql Server,Tsql,Sql Server 2000,我想从SQLServer2000中的TSQL调用Web服务。我尝试了以下代码: 将@Object声明为Int; 声明@ResponseText为Varchar8000; Exec sp_OACreate'MSXML2.XMLHTTP',@Object OUT; Exec sp_OAMethod@Object'open',NULL'get','http://server/ws/service1.asmx/Test","假",; Exec sp_OAMethod@Object'send'; Exec

我想从SQLServer2000中的TSQL调用Web服务。我尝试了以下代码:

将@Object声明为Int; 声明@ResponseText为Varchar8000; Exec sp_OACreate'MSXML2.XMLHTTP',@Object OUT; Exec sp_OAMethod@Object'open',NULL'get','http://server/ws/service1.asmx/Test","假",; Exec sp_OAMethod@Object'send'; Exec sp_OAMethod@Object,'responseText',@responseText输出; 选择@ResponseText Resultado; Exec sp_OADestroy@Object; 为此,我必须启用Ole自动化:

sp_配置“显示高级选项”,1; 去 重新配置; 去 sp_配置“Ole自动化程序”,1; 去 重新配置; 去 在我的测试服务器工作正常的情况下,问题是在生产服务器上运行

sp_配置“Ole自动化程序”,1; 我得到以下错误:

配置选项“Ole自动化过程”不存在,或者可能是高级选项

跑步时

exec sp_配置 在测试服务器上,将记录Ole自动化过程带到生产服务器上

使现代化 我修改代码以捕获错误:

将@Object声明为Int; 声明@ResponseText为Varchar8000; Exec sp_OACreate'MSXML2.XMLHTTP',@Object OUT; Exec sp_OAMethod@Object'open',NULL'get','http://server/ws/service1.asmx/Test","假",; Exec sp_OAMethod@Object'send'; Exec sp_OAMethod@Object,'responseText',@responseText输出; EXEC sp_OAGetErrorInfo@Object 选择@ResponseText Resultado; Exec sp_OADestroy@Object; 指令sp_OAGetErrorInfo EXEC@Object return:0x8004271A srv_转换中出错

根据微软的说法,是SqlServer的问题。因为在我的例子中,Web服务的结果超过4000个字符


如何从TSQL调用web服务?

嘿,我可能有一些帮助,如果您想从T-SQL调用HTTP web服务,请不要使用SQLCLR,您可以使用对象自动化扩展存储过程自动化XMLHTTP服务器对象


不过,我建议您使用CLR或SSIS包。

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

如果WScript.Arguments.Count=1,则 设置http=CreateObjectMicrosoft.XmlHttp http.open GET,WScript.Arguments0,FALSE http.send Echo http.responseText 其他的 WS地址未提供WScript.Echo。 如果结束 然后在TSQL中:

声明@Command varchar100 声明@RetInfo varchar8000 选择@Command='cscript c:\callWS.vbshttp://server/ws/service1.asmx/Test' 打印@命令 exec@RetInfo=master.dbo.xp\u cmdshell@Command 打印@RetInfo
我刚刚在srv_convert中偶然发现了相同的错误-0x8004271A错误

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

Create table #tmp(dt nvarchar(max))
insert into #tmp 
exec @hr =sp_OAGetProperty @objWinHttp, 'ResponseText'
Select dt from #tmp -- single column/single row.
Drop Table #tmp -- clean up

您是否运行了sp\U配置“显示高级选项”,1;是否也在生产中?检查测试服务器和生产服务器上的SQL Server版本。听起来他们好像不一样。@Andomar,sp_configure“显示高级选项”,1;在生产服务器中运行良好。此查询的结果是:从master.dbo.sysobjects中选择*,其中名称为“%sp_OA%”和xtype='X'@Andomar,结果是:sp_OACreate、sp_OADestroy、sp_OAGetErrorInfo、sp_OAGetProperty、sp_OAMethod、sp_OASetProperty、,sp_表示感谢,但在这种情况下,还必须启用Ole自动化过程,这就是我遇到的问题。