SQL Server中執行正則表達式

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章