簡體   English   中英

用於提取存儲過程名稱的更快的Regex表達式

[英]Faster Regex expression for extracting Stored procedure name

我有此存儲過程,並指定了表名(例如:“ userCompanyGrouping_tbl ”)。 我必須提取使用給定表名的存儲過程名稱。
我正在使用正則表達式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

下面的正則表達式會更好,如上所述:

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

“ ParentProcName”將捕獲創建或更改的存儲過程的名稱

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM