首页 文章

如何识别引用特定表的所有存储过程

提问于
浏览
103

我创建了一个关于开发环境的表用于测试目的,并且很少有sp正在重写这个表 . 现在我必须删除此表以及识别引用此表的所有sp . 我很难找到所有sp的列表 . 请通过假设表名为“x”并且数据库是sql server 2005来建议一些查询 .

10 回答

  • 191
    SELECT Name
    FROM sys.procedures
    WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%TableNameOrWhatever%'
    

    顺便说一句 - 这是这类问题的便利资源:Querying the SQL Server System Catalog FAQ

  • 2

    以下适用于SQL2008及更高版本 . 提供存储过程和函数的列表 .

    select distinct [Table Name] = o.Name, [Found In] = sp.Name, sp.type_desc
      from sys.objects o inner join sys.sql_expression_dependencies  sd on o.object_id = sd.referenced_id
                    inner join sys.objects sp on sd.referencing_id = sp.object_id
                        and sp.type in ('P', 'FN')
      where o.name = 'YourTableName'
      order by sp.Name
    
  • 15

    非查询方式是使用Sql Server Management Studio .

    找到该表,右键单击并选择“查看依赖关系” .

    EDIT

    但是,正如评论者所说,这不是很可靠 .

  • 24

    有时上面的查询不会给出正确的结果,有内置的存储过程可用于获取表依赖关系:

    EXEC sp_depends @objname = N'TableName';
    
  • 5
    SELECT
        o.name
    FROM
        sys.sql_modules sm
    INNER JOIN sys.objects o ON
        o.object_id = sm.object_id
    WHERE
        sm.definition LIKE '%<table name>%'
    

    请记住,这也会打开表名在注释中的SP,或者表名是正在使用的另一个表名的子字符串 . 例如,如果您有名为“test”和“test_2”的表,并且您尝试使用“test”搜索SP,那么您将获得两者的结果 .

  • 1

    以下查询将获取所有存储过程名称以及这些SP的相应定义

    select 
       so.name, 
       text 
    from 
       sysobjects so, 
       syscomments sc 
    where 
       so.id = sc.id 
       and UPPER(text) like '%<TABLE NAME>%'
    
  • 5

    下面的查询仅在搜索表上的依赖项而不是列上的依赖项时才有效:

    EXEC sp_depends @objname = N'TableName';
    

    但是,如果要搜索各种依赖项,以下查询是最佳选项,它不会遗漏任何内容 . 它实际上提供了比所需更多的信息 .

    select distinct
            so.name
            --, text 
      from 
           sysobjects so, 
           syscomments sc 
      where 
         so.id = sc.id 
         and lower(text) like '%organizationtypeid%'
      order by so.name
    
  • 5
    SELECT DISTINCT OBJECT_NAME(OBJECT_ID),
    object_definition(OBJECT_ID)
    FROM sys.Procedures
    WHERE object_definition(OBJECT_ID) LIKE '%' + 'table_name' + '%'
    
    GO
    

    如果您必须提及表名,这将有效 .

  • 14

    在管理工作室中,您可以右键单击表格并单击以'View Dependencies'
    enter image description here

    你可以看到与你的表有依赖关系的对象列表:
    enter image description here

  • 0

    试试这个

    SELECT DISTINCT so.name
        FROM syscomments sc
        INNER JOIN sysobjects so ON sc.id=so.id
        WHERE sc.TEXT LIKE '%your table name%'
    

相关问题