SQLServer 通过触发器调用存储过程,同时在存储过程中调用web http服务。
1、sqlserver数据库开启相关服务
--sqlserver数据库开启相关服务 --查看 OLE Automation Procedures 的当前设置。0未启用。 exec sp_configure 'show advanced option', '1' --只有这个高级选项被打开的时候,才有权限修改其他配置。 go reconfigure --运行reconfigure语句进行配置 go exec sp_configure 'Ole Automation Procedures'; go --启用Ole Automation Procedures sp_configure 'show advanced options', 1; go reconfigure; go sp_configure 'Ole Automation Procedures', 1; go reconfigure; go
2、创建触发器
---通过sql server 调用应用程序 --触发器 create trigger notify_trigger on dbo.tab_bas_plc after update as begin declare @taskno varchar(50) declare @planweight numeric(10, 2) declare @factweight numeric(10, 2) declare @taskstate int /* update触发器会在更新数据后, 将更新前的数据保存在deleted表中, 更新后的数据保存在inserted表中。 */ set @taskno=(select Deleted.taskno from Deleted) set @planweight=(select Deleted.planweight from Deleted) set @factweight=(select Inserted.factweight from Inserted) set @taskstate=(select Inserted.taskstate from Inserted) if @taskstate = '1' begin exec pro_NotifyApp @taskno, @planweight, @factweight end end
3、创建存储过程
--存储过程 create procedure dbo.pro_NotifyApp( @taskno varchar(50), @planweight numeric(10, 2), @factweight numeric(10, 2) ) as begin declare @url as varchar(1000) --通过http协议调用的接口地址 set @url = 'http://192.168.0.18:8080/esb/service?action=ws&from=db&to=all&taskno=' + @taskno + '&factweight=' + cast(@factweight as varchar(50)) print @url declare @obj as int declare @res as varchar(4000) exec sp_OACreate 'MSXML2.XMLHTTP', @obj out; exec sp_OAMethod @obj, 'open', null, 'get', @url, 'false' exec sp_OAMethod @obj, 'send' exec sp_OAMethod @obj, 'responseText', @res output --过滤" set @res = replace(@res, '"', '') print @res --select @res insert into tab_bas_plc_log(taskno, planweight, factweight, webresult, logdate) values (@taskno, @planweight, @factweight, @res, getdate()); exec sp_OADestroy @obj end