在約束裏使用正則表達式

最近在開發項目的時間發現一個問題,數據庫是我建的,我同事不按規則來添加數據,後果是視圖沒法運行

其中有一列的格式如下

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

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