笔记319 使用存储过程调用webservice 2013-7-12
笔记319 使用存储过程调用webservice 2013-7-12
1 --使用存储过程调用webservice 2013-7-12 2 --需求:当表中insert数据后(数据由另一个数据库A同步产生),需要调用webservice,将返回结果更新或插入到表中, 3 --同步回数据库A中 4 -- 5 -- 6 --方法:使用触发器调用存储过程,在存储过程中直接调用webservice(下面的内容是在网上现有的方案基础上作了一些补充) 7 -- 8 -- 9 --步骤:1.更改全局配置 10 11 sp_configure 'show advanced options', 1; 12 GO 13 RECONFIGURE; 14 GO 15 16 sp_configure 'Ole Automation Procedures', 1; 17 GO 18 RECONFIGURE; 19 GO 20 21 22 23 --2.安装SoapToolkit(网上现有的方案大多没有提到这步) 24 --SoapToolkit30下载地址:http://download.csdn.net/download/ahywg/3800156 25 26 27 --3.SQL直接调用webservice(略去触发器和存储过程) 28 29 30 DECLARE @scid INT 31 DECLARE @rt int 32 DECLARE @result nvarchar(4000) 33 34 35 --创建MSSOAP.SoapClient组件(如果安装的是SoapToolkit30,应该是MSSOAP.SoapClient30, 36 --否则是MSSOAP.SoapClient),存储到@object中 37 38 EXEC @rt=sp_OACreate 'MSSOAP.SoapClient30',@scid out 39 40 41 42 --'http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl'为webservice地址 43 44 --‘qqOnlineWebService’为webservice名称 45 46 EXEC @rt = sp_OAMethod @scid, 'mssoapinit',null,'http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl','qqOnlineWebService' 47 48 49 50 --'qqCheckOnline'为webservice的一个方法,后面跟2个参数(输入参数:QQ号码String,默认QQ号码:8698053。返回数据:String,Y = 在线;N = 离线;E = QQ号码错误;A = 商业用户验证失败;V = 免费用户超过数量) 51 52 EXEC @rt = sp_OAMethod @scid, 'qqCheckOnline', @result OUT,N'1815357042' 53 54 55 IF @rt <> 0 56 BEGIN 57 EXEC sp_OAGetErrorInfo @scid 58 END 59 ELSE 60 BEGIN 61 SELECT @result 62 END 63 64 --释放掉@scid 65 EXEC @rt = sp_OADestroy @scid 66 GO 67 68 69 70 --注:这种方法适用webservice返回类型为字符串且长度不大于4000的类型,有一定的局限性