现在的位置: 首页 > 综合 > 正文

T SQL + 正则表达式

2012年09月03日 ⁄ 综合 ⁄ 共 2148字 ⁄ 字号 评论关闭
由于要验证某栏位的内容是否符合一定要求,最好的办法是用正则表达式,因为SQL Server 2000里面还没找到可以try catch的好办法,所以就找看能否加正则表达式,结果还真被我都搜索到了

验证的代码就不贴了,懒惰,呵呵

 1SET ANSI_NULLS ON
 2GO
 3SET QUOTED_IDENTIFIER ON
 4GO
 5CREATE FUNCTION [dbo].[find_regular_expression]
 6 (
 7  @source varchar(5000),   --需要匹配的源字符串
 8  @regexp varchar(1000),  --正则表达式
 9  @ignorecase bit = 0  --是否区分大小写,默认为false
10 )
11RETURNS bit  --返回结果0-false,1-true
12AS
13 BEGIN
14
15 --0(成功)或非零数字(失败),是由 OLE 自动化对象返回的 HRESULT 的整数值。
16  DECLARE @hr integer 
17
18--用于保存返回的对象令牌,以便之后对该对象进行操作
19  DECLARE @objRegExp integer   DECLARE @objMatches integer
20
21--保存结果
22  DECLARE @results bit
23  
24/*
25创建 OLE 对象实例,只有 sysadmin 固定服务器角色的成员才能执行 sp_OACreate,并确定机器中有VBScript.RegExp类库
26*/

27  EXEC @hr = sp_OACreate 'VBScript.RegExp'@objRegExp OUTPUT
28  IF @hr <> 0 BEGIN
29   SET @results = 0
30   RETURN @results
31  END
32/*
33以下三个分别是设置新建对象的三个属性。下面是'VBScript.RegExp'中常用的属性举例:
34    Dim regEx,Match,Matches         '建立变量。
35    Set regEx = New RegExp         '建立一般表达式。
36    regEx.Pattern= patrn         '设置模式。
37    regEx.IgnoreCase = True         '设置是否区分大小写。
38    regEx.Global=True                             '设置全局可用性。
39    set Matches=regEx.Execute(string)             '重复匹配集合
40    RegExpTest = regEx.Execute(strng)      '执行搜索。
41   for each match in matches                    '重复匹配集合
42   RetStr=RetStr &"Match found at position "
43   RetStr=RetStr&Match.FirstIndex&".Match Value is '"
44   RetStr=RetStr&Match.Value&"'."&vbCRLF Next
45   RegExpTest=RetStr
46
47*/

48  EXEC @hr = sp_OASetProperty @objRegExp'Pattern'@regexp
49  IF @hr <> 0 BEGIN
50   SET @results = 0
51   RETURN @results
52  END
53  EXEC @hr = sp_OASetProperty @objRegExp'Global', false
54  IF @hr <> 0 BEGIN
55   SET @results = 0
56   RETURN @results
57  END
58  EXEC @hr = sp_OASetProperty @objRegExp'IgnoreCase'@ignorecase
59  IF @hr <> 0 BEGIN
60   SET @results = 0
61   RETURN @results
62  END 
63--调用对象方法
64  EXEC @hr = sp_OAMethod @objRegExp'Test'@results OUTPUT, @source
65  IF @hr <> 0 BEGIN
66   SET @results = 0
67   RETURN @results
68  END
69--释放已创建的 OLE 对象
70  EXEC @hr = sp_OADestroy @objRegExp
71  IF @hr <> 0 BEGIN
72   SET @results = 0
73   RETURN @results
74  END
75 RETURN @results
76 END
77

抱歉!评论已关闭.