SQL Server 访问URL 调用WebServer
以下整理的SQL Server中访问URL地址的方法,并已封装成存储过程,可以实现POST/GET请求
SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO
/**
存储过程发起URL请求 启用 Ole Automation Procedures 选项
exec sp_configure 'show advanced options',1;
go
reconfigure;
go
sp_configure 'Ole Automation Procedures',1;
go
reconfigure;
go
*/
ALTER PROC P_Url_SendRequest
(
@Url VARCHAR() = '' ,
@PostData VARCHAR() = '' ,
@ResponseText VARCHAR() = '' OUTPUT
) AS
SET NOCOUNT ON DECLARE @ServiceUrl AS VARCHAR()
DECLARE @UrlAddress VARCHAR() ,
@ErrMsg VARCHAR() SET @ServiceUrl = @Url PRINT @ServiceUrl DECLARE @Object AS INT , @status INT ,
@returnText AS VARCHAR() ,
@HttpStatus VARCHAR() ,
@HttpMethod VARCHAR() = 'get' IF ISNULL(@PostData, '') <> ''
SET @HttpMethod = 'post' /*初始化对*/
EXEC @status = sp_OACreate 'Msxml2.ServerXMLHTTP.3.0', @Object OUT;
IF @status <>
BEGIN
EXEC sp_OAGetErrorInfo @Object, @ErrMsg OUT, @returnText OUT
SET @ErrMsg = '初始化对象失败,' + @ErrMsg + ISNULL(@returnText, '')
RAISERROR(@ErrMsg,,-)
RETURN
END /*创建链接*/
EXEC @status = sp_OAMethod @Object, 'open', NULL, @HttpMethod, @ServiceUrl,
'false'
IF @status <>
BEGIN
EXEC sp_OAGetErrorInfo @Object, @ErrMsg OUT, @returnText OUT
SET @ErrMsg = '创建连接失败,' + @ErrMsg + ISNULL(@returnText, '')
RAISERROR(@ErrMsg,,-)
RETURN
END SELECT @HttpMethod IF @HttpMethod = 'post'
BEGIN
--EXEC @status = sp_OAMethod @Object, 'setRequestHeader',
-- 'Content-Type', 'application/x-www-form-urlencoded' EXEC @status = sys.sp_OAMethod @Object, 'setRequestHeader', NULL,
'Content-Type', 'application/x-www-form-urlencoded';
END
ELSE
BEGIN EXEC @status = sp_OAMethod @Object, 'setRequestHeader', NULL,
'Content-Type', 'text/xml; charset=gb2312'
PRINT @status
END IF @status <>
BEGIN
EXEC sp_OAGetErrorInfo @Object, @ErrMsg OUT, @returnText OUT SET @ErrMsg = '设置RequestHeader属性失败,' + @ErrMsg
+ ISNULL(@returnText, '')
RAISERROR(@ErrMsg,,-)
RETURN
END
EXEC @status = sp_OAMethod @Object, 'send', NULL, @PostData
IF @status <>
BEGIN
EXEC sp_OAGetErrorInfo @Object, @ErrMsg OUT, @returnText OUT
SET @ErrMsg = '发送请求头失败,' + @ErrMsg + ISNULL(@returnText, '')
RAISERROR(@ErrMsg,,-)
RETURN
END EXEC @status = sys.sp_OAGetProperty @Object, 'Status', @HttpStatus OUT; IF @status <>
BEGIN
EXEC sp_OAGetErrorInfo @Object, @ErrMsg OUT, @returnText OUT
SET @ErrMsg = '读取[Status]属性值失败,' + @ErrMsg + ISNULL(@returnText,
'')
RAISERROR(@ErrMsg,,-)
RETURN
END IF @HttpStatus <>
BEGIN
SET @ErrMsg = '访问错误,http状态代码,' + @HttpStatus
RAISERROR(@ErrMsg,,);
RETURN -;
END EXEC @status = sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
IF @status <>
BEGIN
EXEC sp_OAGetErrorInfo @Object, @ErrMsg OUT, @returnText OUT
SET @ErrMsg = '获取回复报文失败,' + ISNULL(@ErrMsg, '')
+ ISNULL(@returnText, '') + ISNULL(@returnText, '')
RAISERROR(@ErrMsg,,-)
RETURN
END
EXEC @status = sp_OADestroy @Object
IF @status <>
BEGIN
EXEC sp_OAGetErrorInfo @Object, @ErrMsg OUT, @returnText OUT
SET @ErrMsg = '释放资源对象,' + @ErrMsg + ISNULL(@returnText, '')
RAISERROR(@ErrMsg,,-)
RETURN
END
RETURN GO
declare @ServiceUrl as varchar()
declare @UrlAddress varchar() --WebService地址:以http开头,结尾带斜杠,例如'http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/'
set @UrlAddress = 'http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/' declare @FunName varchar()
--WebService中调用的方法名:例如'getMobileCodeInfo'
set @FunName = 'getMobileCodeInfo' --以下参数对应WebService中4个参数的[参数名]
declare @P1 varchar(),@P2 varchar()
set @P1 = 'mobileCode'
set @P2 = 'userid' declare @P1_Value varchar(),@P2_Value varchar()
set @P1_Value = ''
set @P2_Value = '' set @ServiceUrl = @UrlAddress + @FunName + '?' + @P1 + '=' + @P1_Value +'&' + @P2 + '=' + @P2_Value Declare @Object as Int
Declare @ResponseText as Varchar()
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'get',@ServiceUrl,'false'
Exec sp_OAMethod @Object, 'send'
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT Select @ResponseText
Exec sp_OADestroy @Object
GO
SQL Server 访问URL 调用WebServer的更多相关文章
- Chapter 1 Securing Your Server and Network(6):为SQL Server访问配置防火墙
原文:Chapter 1 Securing Your Server and Network(6):为SQL Server访问配置防火墙 原文出处:http://blog.csdn.net/dba_hu ...
- SQL点滴15—在SQL Server 2008中调用C#程序
原文:SQL点滴15-在SQL Server 2008中调用C#程序 T-SQL的在执行普通的查询的时候是很高效的,但是在执行循环,判断这样的语句的时候效率就不那么的高了.这时可以借助CLR了,我们可 ...
- 在SQL Server 2008中调用.net,dll
原文:在SQL Server 2008中调用.net,dll T-SQL的在执行普通的查询的时候是很高效的,但是在执行循环,判断这样的语句的时候效率就不那么的高了.这时可以借助CLR了,我们可以在SQ ...
- [转] sql server 跨数据库调用存储过程
A库存储过程: create PROCEDURE [dbo].[spAAAForTest] ( ) =null , ) =null ) AS BEGIN select N'A' AS a , N'B' ...
- 动态下载 Yahoo 网络数据存入 Microsoft SQL Server 再 Matlab 调用的一个完整例子
% 编程环境: Matlab 2014a, win7 32bit, Microsoft SQL Server 2008r2 %% % 清屏 clc; clear all; close all; %% ...
- SQL Server 2008R2 :远程调用失败 的解决方法(全部方法)
SQL 中远程调用失败的原因 1.服务里面的启动权限未能启动,修改sql对应的服务进程权限就可以了 2.是因为VS 和SQL 起冲突了,数据库找不到访问地址导致的.解决的办法很简单,就是卸载掉多余的版 ...
- SQL Server访问MySql
使用环境:操作系统:window7数据库:SQL Server2005.MySql5.01.在安装了SQL Server的服务器上安装MySql的ODBC驱动:下载链接:http://dev.mysq ...
- Sql Server 数据库中调用dll文件
1.首先新建一个空的解决方案,并添加一个类库,代码如下,编译并生产dll using System; using System.Collections.Generic; using System.Da ...
- sql server 跨数据库调用存储过程
A库存储过程: create PROCEDURE [dbo].[spAAAForTest] ( ) =null , ) =null ) AS BEGIN select N'A' AS a , N'B' ...
随机推荐
- JavaScript 之 动态加载JS代码或JS文件
2.动态加载JS文件 <script type="text/javascript"> function loadScript(url, callback) { var ...
- 【树莓派】使用VNC进行远程控制
之前有进行过VNC以及xrdp连接树莓派,并成功了. 这里看到一篇比较新的,基于mac的连接,文章转载收藏,实践可参考. 这一课里我们将学习如何在树莓派上安装和使用VNC.它可以使你通过图形界面的方式 ...
- 部分Android或IOS手机拍照后照片被旋转的问题
1.我们平时手机拍的照片,传到电脑后,使用Photoshop或者其它图片浏览工具打开时,发现图片是被转过的.可是Windows上预览却是正的.其实原因是部分Android或IOS手机拍照后,将图片角度 ...
- HttpLuaModule——翻译(二)
access_by_lua access阶段.事例: location / { deny 192.168.1.1; allow ; allow ; deny all; access_by_lua ' ...
- Jenkins 持续集成综合实战
Jenkins 是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建.测试和部署等功能.本文以 CentOS7 环境为例,总结了 Jenkin ...
- Python-统计svn代码总行数
1 #!/bin/bash/python 2 # -*-coding:utf-8-*- 3 #svn统计url代码行数脚本,过滤空行,不过滤注释. 4 5 import subprocess,os,s ...
- 一、Django用Eclipse编写一个登录界面
一.Django用Eclipse编写一个登录界面 二.Django用Eclipse编写一个登录界面Ajax和Django交互 Eclipse安装Python插件和Django的步骤直接省略. 创建de ...
- 转:Flash 插件面板 DragonBonesDesignPanel 的绿色安装方法
最近在cocos2d-js下捣腾Dragonbones.转一个文章,大家可以参考安装Dragonbones.关于这个Dragonbones,5月份的时候还用得好好的,cocos2d-js还能妥妥的加载 ...
- JDK提供的四种线程池
一.线程池什么时候用,有什么好处? “线程池”顾名思义,就是存放线程的池子,这个池子可以存放多少线程取决于采用哪种线程池,取决于有多少并发线程,有多少计算机的硬件资源.使用线程池最直接的好处就是:线程 ...
- Java用freemarker导出word
概述 最近一个项目要导出word文档,折腾老半天,发现还是用freemarker的模板来搞比较方便省事,现总结一下关键步骤,供大家参考,这里是一个简单的试卷生成例子. 详细 代码下载:http://w ...