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' ...
随机推荐
- iOS 根据圆心的坐标点、半径、当前手势所在的坐标点,计算出圆的运动轨迹坐标
/** * 根据圆心的坐标点.半径.当前手势所在的坐标点,计算出圆的运动轨迹坐标 * @param radius 圆心半径 * @param centerCircle 圆心的坐标点 * @param ...
- CSS 之 div中文字超出时自动换行
在开发中很容易遇到div中文字超出的问题,在此总结以下方法: 1. white-space :属性设置如何处理元素内的空白.这个属性声明建立布局过程中如何处理元素中的空白符.所有浏览器都支 ...
- CMUSphinx Learn - Basic concepts of speech
Basic concepts of speech Speech is a complex phenomenon. People rarely understand how is it produced ...
- windows服务管理TopShelf
http://docs.topshelf-project.com/en/latest/index.html 我曾经把名称错为Topself
- AOP技术分析
AOP的概述(http://www.cnblogs.com/lxp503238/p/6837653.html) 1. 什么是AOP的技术? * 在软件业,AOP为Aspec ...
- Linux文件与目录操作
1:目录操作指令 cd :切换目录 pwd:显示当前目录 mkdir:创建一个新目录 rmdir:删除一个空的目录rmdir -r:删除一个非空目录 . :此层目录 .. :上层目录 -:前一个工作目 ...
- SpringMVC学习笔记六:使用Formatter解析或格式化数据
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6832903.html Converter可以将一种类型转换成另一种类型,是任意Object之间的类型 ...
- Java ThreadLocal (Java代码实战-006)
ThreadLocal解决什么问题 由于 ThreadLocal 支持范型,如 ThreadLocal< StringBuilder >,为表述方便,后文用 变量 代表 ThreadLoc ...
- CSS知识点集锦
CSS知识点集锦 CreateTime--2016年9月29日09:43:10Author:Marydon UpdateTime--2017年3月21日08:03:13 2.CSS样式优先级问题 ...
- 〖Linux〗上传单个文件到FTP的Shell命令行(函数)
#!/bin/bash - #=============================================================================== # # F ...