closetome
上班的时候突然有一个想法,sqlserver能否调用webservice发送短信呢?
经过查找资料,终于找到了解决办法,现将步骤贴到下面:
(1)开启sqlserver组件功能,如果不开启这个组件功能,那么在sqlserver执行语句时将不会成功。
sp_configure \'show advanced options\', 1;
GO
RECONFIGURE;
GO
sp_configure \'Ole Automation Procedures\', 1;
GO
RECONFIGURE;
GO
以数据库管理员的身份执行上面的语句,返回结果如下:
配置选项 \'show advanced options\' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。
配置选项 \'Ole Automation Procedures\' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。
(2)编写SQL调用webservice的语句,代码及注释如下:
DECLARE @object int,@hr int
DECLARE @domain nvarchar(255)
DECLARE @sendMsg nvarchar(200),@Mobile nvarchar(15)
set @Mobile=N\'15810337866\'
set @sendMsg=N\'SQL调用webservice发送测试短信\'
--创建MSSOAP.SoapClient组件,存储到@object中
--如果是mssoap3版本 则EXEC @hr=sp_OACreate \'MSSOAP.SoapClient30\',@object out
EXEC @hr=sp_OACreate \'MSSOAP.SoapClient\',@object out
--\'http://218.XXX.154.XXX/MRMService/SmsService.asmx?wsdl\'为webservice地址,一定要加‘?wsdl’
--‘SmsService’为webservice名称
EXEC @hr = sp_OAMethod @object, \'mssoapinit\',null,\'http://218.XXX.154.XXX/MRMService/SmsService.asmx?wsdl\',\'SmsService\'
--\'SendMsg\'为webservice的一个方法,后面跟8个输入参数
EXEC @hr = sp_OAMethod @object, \'SendMsg\', @domain OUT,N\'999999\',@Mobile,@sendMsg,N\'110699\',N\'庞飞阳\',N\'1\',N\'总公司\',N\'\'
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object  
   select @object
END
ELSE
BEGIN
   select @domain
  DECLARE @hdoc int
  DECLARE @x xml
  SELECT @x = @domain
  SELECT @X
  /*读取XML文档并进行分析,返回一个句柄,可用于访问 XML 文档的新创建的内部表示方式*/
  EXEC SP_XML_PREPAREDOCUMENT @hdoc OUTPUT, @x
  
  /*获取建筑编号*/
  SELECT * FROM OPENXML(@hdoc,\'NewDataSet/BuildInfos\',10)/*构建行集视图*/
  WITH (     
       SN VARCHAR(10),
       [Name] varchar(50),
       Address VARCHAR(100)
  )
 .......//处理.....................
END
--释放掉@object
EXEC @hr = sp_OADestroy @object
GO
至此,sqlserver能否调用webservice发送短信的功能已经完成,成功收到了短信:“SQL????webservice????????????????????”。
有人会问,为什么收到的短信中,中文部分全部为“????????”呢,仔细查询了一下,sqlserver的编码格式,语句如下:
SELECT COLLATIONPROPERTY(\'Chinese_PRC_Stroke_CI_AI_KS_WS\', \'CodePage\')
返回值为:936,说明为中文。
 而webservice得编码格式为UTF8,sqlserver不支持UTF8格式,所以会 ......

分类:

技术点:

相关文章: