我有这个存储过程并给出一个表名(例如:" 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
答案 0 :(得分:0)
如上所述,以下正则表达式会更好:
^\s*[^(--)]{0}(CREATE +PROCEDURE|ALTER +PROCEDURE)\s+(?<ParentProcName>(\w|_|\[|\]|\.)*)
“ParentProcName”将捕获已创建或更改的存储过程的名称