上班的时候突然有一个想法,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中
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
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格式,所以会出现乱码。
希望有解决办法的高手给以指点,谢谢