首页 文章

查询以列出所有存储过程

提问于
浏览
282

什么查询可以返回SQL Server数据库中所有存储过程的名称

如果查询可以排除系统存储过程,那将更有帮助 .

21 回答

  • 0

    您可以尝试此查询以获取存储过程和函数:

    SELECT name, type
    FROM dbo.sysobjects
    WHERE type IN (
        'P', -- stored procedures
        'FN', -- scalar functions 
        'IF', -- inline table-valued functions
        'TF' -- table-valued functions
    )
    ORDER BY type, name
    
  • 5

    根据我的理解,“首选”方法是使用information_schema表:

    select * 
      from information_schema.routines 
     where routine_type = 'PROCEDURE'
    
  • 11
    SELECT name, 
           type
      FROM dbo.sysobjects
     WHERE (type = 'P')
    
  • 0

    这将只提供存储过程的名称 .

    select specific_name
    from information_schema.routines
    where routine_type = 'PROCEDURE';
    
  • 0

    除了系统过程之外,这还可以帮助列出过程:

    select * from sys.all_objects where type='p' and is_ms_shipped=0
    
  • 0
    select *  
      from dbo.sysobjects
     where xtype = 'P'
       and status > 0
    
  • 422

    我已经调整了LostCajun上面的优秀帖子来排除系统存储过程 . 我还删除了“Extract” . 从代码,因为我无法弄清楚它是什么,它给了我错误 . 循环内的“fetch next”语句也需要一个“into”子句 .

    use <<databasename>>
    go
    
    declare @aQuery nvarchar(1024);
    declare @spName nvarchar(64);
    declare allSP cursor for
        select p.name  
        from sys.procedures p 
        where p.type_desc = 'SQL_STORED_PROCEDURE' 
        and LEFT(p.name,3) NOT IN ('sp_','xp_','ms_')
        order by p.name;
    open allSP;
    fetch next from allSP into @spName;
    while (@@FETCH_STATUS = 0)
    begin
        set @aQuery = 'sp_helptext [' + @spName + ']';
        exec sp_executesql @aQuery;
        fetch next from allSP into @spName;
    end;
    close allSP;
    deallocate allSP;
    
  • 81

    以下将在所选数据库中返回所有过程

    SELECT * FROM sys.procedures
    
  • 24

    正如迈克所说,最好的方法是使用 information_schema . 只要你're not in the master database, system stored procedures won' t被退回 .

    select * 
      from DatabaseName.information_schema.routines 
     where routine_type = 'PROCEDURE'
    

    如果由于某种原因,您在master数据库中有非系统存储过程,则可以使用该查询(这将过滤掉MOST系统存储过程):

    select * 
      from master.information_schema.routines 
     where routine_type = 'PROCEDURE' 
       and Left(Routine_Name, 3) NOT IN ('sp_', 'xp_', 'ms_')
    
  • 9

    选择所有存储过程和视图

    select name,type,type_desc
    from sys.objects
    where type in ('V','P')
    order by name,type
    
  • 3

    只是名字:

    SELECT SPECIFIC_NAME  
    FROM YOUR_DB_NAME.information_schema.routines  
    WHERE routine_type = 'PROCEDURE'
    
  • 1

    获取对象的最佳方法是使用sys.sql_modules . 你可以从这个表中找到你想要的所有东西,并将这个表与其他表连接起来,通过object_id获取更多信息

    SELECT o. object_id,o.name AS name,o.type_desc,m.definition,schemas.name scheamaName
    FROM sys.sql_modules        m 
        INNER JOIN sys.objects  o ON m.object_id=o.OBJECT_ID
        INNER JOIN sys.schemas ON schemas.schema_id = o.schema_id
        WHERE [TYPE]='p'
    
  • 1

    列出特定MySQL数据库的存储过程:

    SHOW PROCEDURE STATUS WHERE db = 'databaseName';
    
  • 1

    试试这个codeplex链接,这个实用程序有助于从sql数据库本地化所有存储过程 .

    https://exportmssqlproc.codeplex.com/

  • 1
    select * from DatabaseName.INFORMATION_SCHEMA.ROUTINES where routine_type = 'PROCEDURE'
    
    select * from DatabaseName.INFORMATION_SCHEMA.ROUTINES where routine_type ='procedure' and left(ROUTINE_NAME,3) not in('sp_', 'xp_', 'ms_')
    
    
       SELECT name, type   FROM dbo.sysobjects
     WHERE (type = 'P')
    
  • 1

    您可以使用以下查询之一在一个数据库中查找存储过程列表:

    查询1:

    SELECT 
            *
        FROM sys.procedures;
    

    查询2:

    SELECT 
            * 
        FROM information_schema.routines 
        WHERE ROUTINE_TYPE = 'PROCEDURE'
    

    如果要查找 all SPs in all Databases 列表,可以使用以下查询:

    CREATE TABLE #ListOfSPs 
        (
            DBName varchar(100), 
            [OBJECT_ID] INT,
            SPName varchar(100)
        )
    
        EXEC sp_msforeachdb 'USE [?]; INSERT INTO #ListOfSPs Select ''?'', Object_Id, Name FROM sys.procedures'
    
        SELECT 
            * 
        FROM #ListOfSPs
    
  • 4

    不幸的是 INFORMATION_SCHEMA 不包含有关系统过程的信息 .

    SELECT *
      FROM sys.objects
     WHERE objectproperty(object_id, N'IsMSShipped') = 0
       AND objectproperty(object_id, N'IsProcedure') = 1
    
  • 0

    这,列出你想要的所有东西

    在Sql Server 2005,2008,2012中:

    Use [YourDataBase]
    
    EXEC sp_tables @table_type = "'PROCEDURE'" 
    EXEC sp_tables @table_type = "'TABLE'"
    EXEC sp_tables @table_type = "'VIEW'"
    

    要么

    SELECT * FROM information_schema.tables
    SELECT * FROM information_schema.VIEWS
    
  • 12

    如果您使用的是SQL Server 2005,则以下内容将起作用:

    select *
      from sys.procedures
     where is_ms_shipped = 0
    
  • 4

    这将返回所有sp名称

    Select * 
    FROM sys.procedures where [type] = 'P' 
         AND is_ms_shipped = 0 
         AND [name] not like 'sp[_]%diagram%'
    
  • 1

    我写了这个简单的tsql来列出所有存储过程的文本 . 请务必在字段中替换您的数据库名称 .

    use << database name >>
    go
    
    declare @aQuery nvarchar(1024);
    declare @spName nvarchar(64);
    declare allSP cursor for
    select p.name  from sys.procedures p where p.type_desc = 'SQL_STORED_PROCEDURE' order by p.name;
    open allSP;
    fetch next from allSP into @spName;
    while (@@FETCH_STATUS = 0)
    begin
        set @aQuery = 'sp_helptext [Extract.' + @spName + ']';
        exec sp_executesql @aQuery;
        fetch next from allSP;
    end;
    close allSP;
    deallocate allSP;
    

相关问题