(sqlServer 2008 + VS2010)
首先,对服务器进行配置。
sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ole Automation Procedures', 1; GO RECONFIGURE; GO
然后实现SQL调用WebService接口,代码如下:
DECLARE @ServiceUrl AS NVARCHAR(1000)
DECLARE @UrlAddress VARCHAR(500)
--------WebService地址:以http开头,结尾带斜杠,
--例如'http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx/'
SET @UrlAddress ='--地址--'
DECLARE @FunName VARCHAR(50)
--- WebService中调用的方法名:例如‘HelloWorld’
SET @FunName='Add'
--- 以下参数对应WebService中参数的[参数名]
DECLARE @p1 VARCHAR(800),@p2 VARCHAR(100),@p3 VARCHAR(100)
SET @p1='a'
SET @p2='b'
SET @p3='c'
--- 以下参数对应WebService中参数的[参数值]
DECLARE @p1_Value VARCHAR(100),@p2_Value VARCHAR(100),@p3_Value VARCHAR(100)
SET @p1_Value = '1'
SET @p2_Value = '2'
SET @p3_Value = '3'
SET @ServiceUrl=@UrlAddress+@FunName+'?'
+@p1+'='+@p1_Value+'&'+@p2+'='+@p2_Value+'&'+@p3+'='+@p3_Value
--- 创建 OLE 对象的实例。
--- 返回的对象令牌必须是数据类型为 int 的局部变量。 该对象令牌用于标识所创建的 OLE 对象,并用于调用其他 OLE 自动化存储过程。
DECLARE @Object AS INT
DECLARE @ResponseText AS VARCHAR(8000)
EXEC sys.sp_OACreate 'MSXML2.XMLHTTP',@Object OUT;
EXEC sys.sp_OAMethod @Object,'open',NULL,'get',@ServiceUrl,'false'
EXEC sys.sp_OAMethod @Object,'send'
EXEC sys.sp_OAMethod @Object,'responseText',@ResponseText OUTPUT
SELECT @ResponseText
--- 当不再需要该对象时,调用 sp_OADestroy 释放使用 sp_OACreate 创建的对象实例。
EXEC sys.sp_OADestroy @Object
GO
此上可参见:https://www.cnblogs.com/davidhou/p/5868136.html
本例中使用的WebService方法 Add:
[WebMethod(Description = "Add —— 测试方法")] public int Add(int a, int b, int c) { return a + b + c; }
调用时遇到的问题:在SQL中报错:请求格式无法识别。
解决方法:在Web.config System.Web节点下添加如下内容
<webServices> <protocols> <add name="HttpPost"/> <add name="HttpGet"/> </protocols> </webServices>