-- =============================================
-- 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