- 浏览: 12175 次
最新评论
如果能在Sql Server中使用正则表达式,一定会对程序编写有很大帮助,那么如何实现呢?
其实Sql Server本身并不提供这样的功能,但我们如果能够通过Sql Server 调用VBScript,那么问题就有解决的可能,这中间我们要先详细了解三个系统级别的存数过程:sp_OACreate , sp_OASetProperty 和 sp_OAMethod sp_OACreate
翻阅一下帮助文件不难知道,该存储过程可以帮我们生成一个OLE对象的实例。也就是我们可以通过它来建立一个COM对象和系统进行交互,也就意味着在系统层面上几乎没有什么干不了的事情了,当然也包括坏事情,所以要仔细看一下用户在这个存储过程上的执行权限,小心被坏蛋利用哦。
它的语法如下:
sp_OACreateprogid, | clsid, objecttokenOUTPUT [ ,context ] progid: 我们要调用的即将被实例化的程序名称
clsid : 我们要调用的即将被实例化的类的名称
objecttoken OUTPUT :被生成的对象的句柄或指针,是个整型变量
context :这是个可选的变量,目的是制定你所创建的对象以什么样的方式执行,它有三个值,可供选择:
1 = In-process (.dll) OLE server only
4 = Local (.exe) OLE server only
5 = Both in-process and local OLE server allowed
为1,则要求对象在一个ActiveX DLL文件中;
值为4,则要求对象在ActiveX EXE服务器中;
如果是缺省的值5,则可以使用任一自动操作。
一般情况下我们可以使用默认值,即不提供该参数变量。
比如你想在数据库中访问微软的Excel,就可以这样来写:
Declare @Object int
Declare @RetVal int
Exec @RetVal=sp_OACreate 'Excel.Application',
@Object OUTPUT
这样你就得到一个被实例化的Excel对象的指针:@Object
有了这个指针,你当然可以让它为你尽份内之事了。至于如何给它设置属性发布命令,就要使用到另外两个系统存储过程:sp_OASetProperty 和 sp_OAMethod, 单从名字就能对他们的功能猜个八九不离十吧。
ok,简单介绍如下:
sp_OASetProperty 和 sp_OAMethod sp_OASetProperty objecttoken, propertyname, newvalue [ , index... ] 该存储过程的功能就是设置对象的属性值,对于上面的语法及参数,应该不需要罗嗦了吧。 sp_OAMethodobjecttoken, methodname [ , returnvalueOUTPUT ] [ , [ @parametername = ]parameter [ OUTPUT ] [ ...n ] ] 上面这个存储过程就是那临门一脚--执行对象的一个方法,并可能同时返回对象的输出值,为什么说是可能,而不是一定呢?因为你知道,有些对象方法只是做事情,它并不告诉你结果的。
好了,现在看看如何在Sql Server中调用VBScript来使用正则表达式吧,我们可以把你要做的事情封装成一个用户自定义函数,以后可随时调用。
程序如下:
CREATE FUNCTION dbo.regexpMatch
(
@source varchar(5000), -- 被检验的字符串
@regexp varchar(1000), -- 正则表达式的字符串
@ignorecase bit = 0 -- 忽略大小写
)
RETURNS bit
AS
BEGIN
DECLARE @hr integer
DECLARE @objRegExp integer
DECLARE @objMatches integer
DECLARE @objMatch integer
DECLARE @count integer
DECLARE @results bit
EXEC @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
IF @hr 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
IF @hr 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OASetProperty @objRegExp, 'Global', false
IF @hr 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignorecase
IF @hr 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OAMethod @objRegExp, 'Test', @results OUTPUT, @source
IF @hr 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OADestroy @objRegExp
IF @hr 0 BEGIN
SET @results = 0
RETURN @results
END
RETURN @results
END
有没有注意到程序的最后还用了一个sp_OADestroy,目的就是释放掉对象的实例,还内存自由的空间
发表评论
-
Java For Android - 操纵字符串中的字符
2012-07-06 09:52 759声明:本文翻译自h ... -
正则基础之
2012-07-06 09:45 642捕获组捕获到的内容,不仅可以在正则表达式外部通过程序进行引 ... -
完整升级XBMC记录
2012-07-06 09:30 988一、下载11.29版本 ... -
js动态控制表单的tr,td的显示和隐藏
2012-07-05 20:45 963无论是事先写好的,还是动态生成的,要找到指定的tr或td都 ... -
Ext JS 4的Grid组件
2012-07-03 13:43 670我们正在不懈地努 ... -
Flex4与java通信(二、与servlet通信)
2012-07-02 12:24 681说明:这里介绍使用URLRequest+URLLoader ... -
flex中给图片(或任意组件)着色的方法
2012-07-02 12:24 576作者:屈剑峰 2011年4月3日 在fl ... -
Flex权威指南3学习笔记之一------界面知识(二)
2012-07-02 12:24 585使用基于条件的约束的布局 1.在viewCart按钮和ch ... -
Flex 屏幕截图并导出图片
2012-07-02 12:23 568在flex中也经常会用 ... -
完美解决Panel设置了borderSkin后内容体与标题栏重叠的问题
2012-07-01 09:58 571如果您做过Flex皮肤 ... -
Web前端开发之“常见模块你真的很了解吗?”
2012-07-01 09:58 771标题和内容模 ... -
Flex3 给VBox/HBox等加背景图片的简易方法
2012-07-01 09:58 910例如有 要给它加个背景图片: 步骤一、 ... -
Flex中要想使图表的横坐标轴标签成45度显示(2)
2012-07-01 09:58 649从外部引入样式 1.在外部src/assets目录文 ... -
实现flex中实现图片平铺
2012-07-01 09:58 664在网页中实现一个图片平铺功能比较简单,只需要设置css样式 ... -
原创-Flex游戏篇--游戏开发概述_6050
2012-06-30 16:23 631原创-Flex游戏篇--游戏开 ... -
Flex优势
2012-06-30 16:23 336Flex优势 2011年07月13日 ... -
flexkf.com flex开发网站简介
2012-06-30 16:23 473flexkf.com flex开发网站简介 2010年06月 ...
相关推荐
/*********使用方法**************/ --正则校验(符合为1,不符合为0) SELECT [dbo].[Regex.IsMatch]('^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$','dyuanrong2010@163.com') 符合验证, [dbo].[Regex...
Sql Server中使用正则表达式的方法。实现比较复杂,成功后很实用
NULL 博文链接:https://haroldxie.iteye.com/blog/1402194
一些资料关于 SQL 语法分析;用正则表达式解析C#文件;使用正则表达式实现的语法分析引擎(C#源代码) ;SQL Server 2005正则表达式使模式匹配和数据提取变得更容易;
SQL Serve提供了简单的字符模糊匹配功能,比如:like, patindex,不过对于某些字符处理场景还显得并不足够,日常碰到的几个问题有: 1. 同一个字符/字符串,出现了多少次 2. 同一个字符,第N次出现的位置 3. 多个...
收集了大部分的正则表达式的使用方法,请赶紧下载哦!!!
NULL 博文链接:https://duanhengbin.iteye.com/blog/1962431
主要介绍了SQL Server中利用正则表达式替换字符串的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
正则表达式在SQL Server 2000中的实现与应用.pdf
sql server 提取汉字/数字/字母的方法 里面是Sql语句,以及测试代码等,一看就会,而且是现成的代码
我相信接触过SQL Server数据库的很多朋友都知道,它是以"--"开头来进行注释的,下面的方法是使用正则表达式匹配tsql注释语句的方法,大家参考使用吧
用C#,正则表达式实现对百度新闻的抓取,开发工具是VS2005和SQL server2000,有数据库的备份,可以直接还原数据库
有想过在T-Sql使用正则表达式吗?是的,完全可以的,我们可以用SQL SERVER CLR sql function来实现这一功能。
一种通过正则表达式进行SQL解释的方法.举例说明他的用法.分析源码等等
–SQL正则替换函数 代码如下: CREATE function dbo.regexReplace ( @source ntext, –原字符串 @regexp varchar(1000), –正则表达式 @replace varchar(1000), –替换值 @globalReplace bit = 1, –是否是全局替换 @...
正则表达式学习笔记,内容详细容易操作,sqlserver java js c++