用于提取存储过程名称的更快的正则表达式

时间:2014-06-23 12:40:26

标签: c# regex

我有这个存储过程并给出一个表名(例如:&#34; userCompanyGrouping_tbl&#34;)。我必须提取使用给定表名的存储过程名称 我正在使用正则表达式CREATE PROCEDURE\\s*(?<proc_name>.*|\n)(.|\n)*userCompanyGrouping_tbl从给定的下面的示例.sql文件中提取存储过程,并且执行速度非常慢。

我必须在GB的大小目录中对多个文件执行搜索。结果非常缓慢。我需要一个更快的正则表达式来提取过程名称。

我正在使用C#正则表达式引擎。

 USE [BI]
    GO

    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    SET ANSI_PADDING ON
    GO

    IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ActiveUsersRelatedCompanies_prc]') AND type in (N'P', N'PC'))
    DROP PROCEDURE [dbo].[ActiveUsersRelatedCompanies_prc]

    GO

    CREATE PROCEDURE  [dbo].[ActiveUsersRelatedCompanies_prc]  
        @Usercompanyid INT
    AS     
    Begin  

    select * 
    FROM dbo.ActiveUsersRelatedCompanies_tbl (NOLOCK)
    WHERE userCompanyId in (
            select  ucg2.userCompanyId
            from    `userCompanyGrouping_tbl` u
                    inner join userCompanyGrouping_tbl ucg2
                        on isNull(u.subParentCompanyId,u.parentCompanyId) = 
                            (case when u.subParentCompanyId is not null then ucg2.subParentCompanyId 
                                else ucg2.parentCompanyId end)
            where   u.userCompanyId = @userCompanyID
    )       
    order by userCompanyName, userGroup, fullName
    END

1 个答案:

答案 0 :(得分:0)

如上所述,以下正则表达式会更好:

^\s*[^(--)]{0}(CREATE +PROCEDURE|ALTER +PROCEDURE)\s+(?<ParentProcName>(\w|_|\[|\]|\.)*)

“ParentProcName”将捕获已创建或更改的存储过程的名称