我想知道是否在任何地方引用了一个SP。目前我正在使用SP_DEPENDS进行检查。
有没有其他方法来检查这个......?
答案 0 :(得分:3)
如果您的依赖项被破坏,我现在想的唯一方法就是输出一个包含所有存储过程定义的SQL文件,然后使用您喜欢的源代码编辑器在.sql文件中搜索依赖项。
答案 1 :(得分:1)
尝试:
SELECT OBJECT_NAME(m.object_id), m.*
FROM SYS.SQL_MODULES m
WHERE m.definition LIKE N'%my_sp_name%'
请注意,SYSCOMMENTS和INFORMATION_SCHEMA.ROUTINES具有nvarchar(4000)列。因此,如果在位置3998使用my_sp_name
,则无法找到它。 SYSCOMMENTS确实有多行但ROUTINES截断。
答案 2 :(得分:0)
我编写此查询以搜索所选字符串的“代码对象”(包括过程,函数,触发器,视图以及其他任何驻留在sys.sql_modules中的内容),无论是表,列,注释还是存储过程名称。我有理由相信这会解释字符串在不同数据页面中“拆分”的可能性。
返回的列是:
这将仅列出字符串所在的对象。如果你搜索,说“声明”,你可能会得到数据库中的每个过程和函数。它也不评估字符串的使用方式。如果您的程序名称(仅)存在于另一个程序的注释中,则将列出该程序。
简而言之,这是一个起点。它将列出您的字符串存在的位置;然后你必须进入并审查每个案例,以确定它是如何使用的。
DECLARE @SearchText varchar(100)
SET @SearchText = 'YourTextHere'
SELECT
schema_name(ob.schema_id) SchemaName
,ob.name
,ob.type_desc
,len(mo.definition) CodeLength
,mo.definition
from sys.sql_modules mo
inner join .sys.objects ob
on ob.object_id = mo.object_id
where mo.definition like '%' + @SearchText + '%'
order by
case schema_name(ob.schema_id)
when 'dbo' then 'A'
else 'B' + str(ob.schema_id, 10)
end
,ob.type_desc
,ob.name