最近在开发项目的时间发现一个问题,数据库是我建的,我同事不按规则来添加数据,后果是视图没法运行
其中有一列的格式如下
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))