用于提取存储过程名称的更快的Regex表达式
本文关键字:Regex 表达式 提取 存储过程 用于 | 更新日期: 2023-09-27 18:09:48
我有这个存储过程和一个表名(例如:" 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"将捕获创建或更改的存储过程的名称