Sql 是否需要查找存储过程中使用“nolock”的表列表?
我有1000多个存储过程,由于一些肮脏的程序员,他们会对存储过程表使用“nolock” 现在我在日常生活中面临着很多问题 由于某些原因,我无法从SP中删除所有nolock关键字,但我需要知道它与表名一起出现在哪个存储过程中 例如:Sql 是否需要查找存储过程中使用“nolock”的表列表?,sql,sql-server,Sql,Sql Server,我有1000多个存储过程,由于一些肮脏的程序员,他们会对存储过程表使用“nolock” 现在我在日常生活中面临着很多问题 由于某些原因,我无法从SP中删除所有nolock关键字,但我需要知道它与表名一起出现在哪个存储过程中 例如: 让我们考虑一个存储过程,用户使用两个表TBLYCH和TBLY帐户,如果一个表TBLY帐户用NoLoCK结束,那么我需要返回下面的细节。 **S.N SP_名称表_名称** 1个sp_用户tbl_帐户 我不需要存储过程名,我知道可以使用例程_定义这样的子句来获取它,我只
让我们考虑一个存储过程,用户使用两个表TBLYCH和TBLY帐户,如果一个表TBLY帐户用NoLoCK结束,那么我需要返回下面的细节。 **S.N SP_名称表_名称** 1个sp_用户tbl_帐户
我不需要存储过程名,我知道可以使用例程_定义这样的子句来获取它,我只需要表名 如果有任何帮助,我将不胜感激……请尝试此查询SELECT name
FROM sys.procedures
WHERE Object_definition(object_id) LIKE '%NOLOCK%'
试试这个:-
Declare @stObjToFind Varchar(150)
Select @stObjToFind = 'With (Nolock)'
Select so.id
,so.name
,so.xtype
From sysobjects As so With (Nolock)
Join
(
Select Distinct sc.id
From syscomments As sc With (Nolock)
Where sc.text Like '%' + @stObjToFind + '%'
) As sc0 On so.id = sc0.id
Where so.name <> @stObjToFind
对于过程和依赖表名,可以使用此查询
SELECT ProcedureName,TableName FROM (
SELECT
S1.name AS ProcedureName, S2.name AS TableName,
ROW_NUMBER() OVER(partition by S1.name,S2.name ORDER BY S1.name,S2.name) AS R
FROM sysdepends SD
INNER JOIN sysobjects S1 ON S1.id=SD.id
INNER JOIN sysobjects S2 ON S2.id=SD.depid
WHERE S1.xtype = 'P' ) X
where R = 1
你查对了吗@沙特:为什么……?你又问了同样的问题……你昨天没问这个吗?几天前,一个和你名字相似的人问了这个问题,得到了一个答案:@Deepshikha:我修改了一些单词,这样就很容易理解了。你想说什么。。?这对我没有帮助??此查询使用此词的存储过程名称的给定结果您的查询不会检查存储过程文本,我需要表名以及包含'NOLOCK'关键字的结果更多详细信息来引用此链接我需要表名以及包含'NOLOCK'关键字选择名称的结果,从sys.sql\u modules modu使用nolock内部连接sys.objects obj和nolock on modu.object\u id=obj.object\u id,其中名称类似“%text%”它不会帮助您找到动态结果集。