-- =============================================-- Author: <liudong>-- Create date: <2012/11/06>-- Description: <sql正则表达式>-- =============================================CREATE FUNCTION Reg ( @pattern varchar(2000), @matchstring varchar(8000) ) returns int as begin declare @objRegexExp int declare @strErrorMessage varchar(255) declare @hr int,@match bit exec @hr= sp_OACreate 'VBScript.RegExp', @objRegexExp out if @hr = 0 exec @hr= sp_OASetProperty @objRegexExp, 'Pattern', @pattern if @hr = 0 exec @hr= sp_OASetProperty @objRegexExp, 'IgnoreCase', 1 if @hr = 0 exec @hr= sp_OAMethod @objRegexExp, 'Test', @match OUT, @matchstring if @hr <>0 begin return null end exec sp_OADestroy @objRegexExp return @match end
函数结果返回 1 ,验证成功。
如果执行上面的函数报如下错误:
SQL Server 阻止了对组件 'Ole Automation Procedures' 的 过程'sys.sp_OACreate' 的访问
执行下面sql语句即可:
USE master GO sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ole Automation Procedures', 1; GO RECONFIGURE; GO sp_configure 'Ad Hoc Distributed Queries', 1; GO RECONFIGURE; GO --查询配置信息 RECONFIGURE; EXEC sp_configure;
测试语句(假如要查找Users表所有用户名为存英文的用户内):
SELECT * FROM Users WHERE dbo.Reg('^[a-zA-Z]+$',UserName)=1