最近在開發項目的時間發現一個問題,數據庫是我建的,我同事不按規則來添加數據,後果是視圖沒法運行
其中有一列的格式如下
aaa/12/23/12/ssscom
要時在insert 時按照這格式insert 進去就要正則表達式
後來我在網上看這個http://sqlteam.com/item.asp?ItemID=13947想出了辦法
代碼如下:
CREATE FUNCTION [dbo].[f_IsRegEx]
(
@val varchar(max),--原字符串
@regexp varchar(1000),--正則表達式
@IgnoreCase bit--是否忽略大小寫
)
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, @val
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
約束表達式:([dbo].[f_IsRegEx]([輸入列名],'^[A-Za-z_]*//d*//d*//d*/[A-Za-z_]*',(0))=(1))