我有超过1000个存储过程,由于一些肮脏的程序员,他们会使用'nolock'来存储过程表。
现在,由于日常基础知识中的这个问题,我面临很多问题。
由于某些原因,我无法从SP中删除所有非关键词,但我需要知道它与表名一起出现在哪个存储过程中。
示例:
让我们考虑一个存储过程(sp_user)使用两个表(tbl_salary)和(tbl_account),如果一个表(tbl_account)以(NOLOCK)结尾,那么我需要返回以下细节。
**S.N SP_Name Table_name**
1 sp_user tbl_account
我不需要存储过程名称,我知道可以使用routine_definition like子句获取它,我只需要表名。
任何帮助都会让我非常感激......
答案 0 :(得分:0)
尝试此查询
SELECT name
FROM sys.procedures
WHERE Object_definition(object_id) LIKE '%NOLOCK%'
答案 1 :(得分:0)
试试这个: -
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
答案 2 :(得分:0)
For Procedure and dependent TableName您可以使用此查询
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