Sql 如何查找SP引用

Sql 如何查找SP引用,sql,sql-server,sql-server-2005,tsql,Sql,Sql Server,Sql Server 2005,Tsql,我想知道是否在任何地方引用了一个SP。目前我正在使用SP_进行检查 是否有其他方法检查此…?尝试: SELECT OBJECT_NAME(m.object_id), m.* FROM SYS.SQL_MODULES m WHERE m.definition LIKE N'%my_sp_name%' 请注意,SYSCOMMENTS和INFORMATION_SCHEMA.ROUTINES有NVARCH4000列。所以如果我的名字用在3998位置,就找不到了。SYSCOMMENTS确实有多行,

我想知道是否在任何地方引用了一个SP。目前我正在使用SP_进行检查

是否有其他方法检查此…?

尝试:

SELECT OBJECT_NAME(m.object_id), m.*
  FROM SYS.SQL_MODULES m
 WHERE m.definition LIKE N'%my_sp_name%'
请注意,SYSCOMMENTS和INFORMATION_SCHEMA.ROUTINES有NVARCH4000列。所以如果我的名字用在3998位置,就找不到了。SYSCOMMENTS确实有多行,但例程会截断

参考资料:

试试:

SELECT OBJECT_NAME(m.object_id), m.*
  FROM SYS.SQL_MODULES m
 WHERE m.definition LIKE N'%my_sp_name%'
请注意,SYSCOMMENTS和INFORMATION_SCHEMA.ROUTINES有NVARCH4000列。所以如果我的名字用在3998位置,就找不到了。SYSCOMMENTS确实有多行,但例程会截断


参考:

如果您的依赖关系被破坏,我现在想确定的唯一方法是导出一个包含所有存储过程定义的SQL文件,然后使用您最喜欢的源代码编辑器在.SQL文件中搜索依赖关系。

如果您的依赖关系被破坏,我现在认为唯一有信心的方法是导出一个包含所有存储过程定义的SQL文件,然后使用您最喜欢的源代码编辑器在.SQL文件中搜索依赖项。

我编写此查询是为了搜索代码对象,其中包括过程、函数、触发器、视图、,以及在sys.sql_模块中为所选字符串存放的任何其他内容,无论是表、列、注释还是存储过程名称。我可以合理地确定,这将解释字符串被分割到不同数据页的可能性

返回的列包括:

拥有模式 对象名 对象类型符合sys.objects中的类型描述 以字节为单位的代码长度有时有助于了解代码的大小 包含字符串的实际代码 这将仅列出存在字符串的对象。如果搜索,比如Declare,可能会得到数据库中的每个过程和函数。它也不会评估字符串的使用方式。如果您的过程名称仅出现在另一个过程的注释中,则将列出该过程

简言之,这是一个起点。它将列出您的字符串所在的位置;然后,您必须进入并审查每个案例,以确定如何使用它

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

我编写此查询是为了搜索代码对象,其中包括过程、函数、触发器、视图,以及在sys.sql_模块中为所选字符串(无论是表、列、注释还是存储过程名称)而驻留的任何其他对象。我可以合理地确定,这将解释字符串被分割到不同数据页的可能性

返回的列包括:

拥有模式 对象名 对象类型符合sys.objects中的类型描述 以字节为单位的代码长度有时有助于了解代码的大小 包含字符串的实际代码 这将仅列出存在字符串的对象。如果搜索,比如Declare,可能会得到数据库中的每个过程和函数。它也不会评估字符串的使用方式。如果您的过程名称仅出现在另一个过程的注释中,则将列出该过程

简言之,这是一个起点。它将列出您的字符串所在的位置;然后,您必须进入并审查每个案例,以确定如何使用它

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