我收到了一个SQL文件,其中有多个存储过程。对于给定的表名,我必须找到一个使用该表的过程名称。这可以通过使用split()
方法和字符串搜索来完成。
如果我使用正则表达式搜索,提取过程名称会更有效吗?
搜索将在GB的大小目录中的多个文件中完成。
例如:我已经获得了一个SQL文件,其中存在两个存储过程,我需要搜索使用表ucg2.userCompanyId
的过程名称。
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].[ActiveUsersAM_prc]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[ActiveUsersAM_prc]
GO
CREATE PROCEDURE [dbo].[ActiveUsersAM_prc]
--ActiveUsers_getdata_prc
@Usercompanyid varchar(max)
AS
Begin
IF OBJECT_ID('tempdb..#ActiveUserCompany') IS NOT NULL
DROP TABLE #ActiveUserCompany
CREATE TABLE #ActiveUserCompany
(userCompanyId INT)
INSERT INTO #ActiveUserCompany
SELECT val FROM dbautil.dbo.Split_fn(@userCompanyID,',')
CREATE CLUSTERED INDEX ix_usercompanyId ON #ActiveUserCompany(userCompanyId)
SELECT * FROM dbo.ActiveUsersAMCache_tbl (nolock)
WHERE userCompanyId IN (SELECT userCompanyId FROM #ActiveUserCompany (nolock))
END
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 :(得分:4)
哪一个更有效率真的重要吗?任何差异都将是微秒级。你更大的问题就是找出一种有效的方法。如果结果太慢,那么找出一种让它更快的方法。在您采用工作方法之前,您对效率的关注是过早优化的典型案例。
虽然你可以可能想出一个能做你想做的正则表达式,但除非你非常精通正则表达式,否则这样做会非常困难。另一方面,使用string.Split
非常容易实现,您可以在几分钟内获得工作代码。它可能会非常快到你的目的。
帮自己一个忙:选择简单的解决方案并继续前进。为真正重要的事情保存优化工作。