【问题标题】:Drop group of stored procedures by name按名称删除存储过程组
【发布时间】:2010-03-15 09:13:41
【问题描述】:

我有一组名称类似于“somename_%”的存储过程。有什么方法可以通过一个查询删除该 SP,例如

DROP PROCEDURE where name like 'somename_%'

.

【问题讨论】:

    标签: sql tsql stored-procedures


    【解决方案1】:

    这适用于 MSSQL 2005 +

    DECLARE @DropScript varchar(max)
    set @DropScript = ''
    
    SELECT @DropScript = @DropScript + 'DROP PROCEDURE [' + schema_name(schema_id)+ '].' + '[' + name + ']
    ' FROM sys.procedures
    where name like 'somename_%'
    
    
    exec (@DropScript)
    

    【讨论】:

    • 它对我也很有效。从一个蹩脚的程序安装中删除了大约 200 sp!谢谢!
    【解决方案2】:

    您可以通过查询数据字典来生成 DDL。例如,在 Oracle 中:

    SELECT 'DROP PROCEDURE "'||owner||'"."'||object_name||'";'
    FROM all_procedures
    WHERE procedure_name IS NULL
    AND lower(object_name) LIKE 'somename_%';
    

    【讨论】:

      【解决方案3】:

      我总是倾向于做这些事情的方式只是使用我的标准从系统表中提取列表过程,然后创建命令列表 - 或者直接在 sql 中,例如SELECT 'DROP PROCEDURE ' + procName FROM system_procedures_table WHERE procName like... 或在 Excel 中。

      【讨论】:

        【解决方案4】:

        在 MS_Sql-Server 中,您可以使用“FOR XML PATH ('')”子句创建一个包含所有相关程序的语句以通过 (ab)...

        BEGIN TRANSACTION;
        GO
        CREATE PROC Test_1  AS
        BEGIN;
          PRINT '1'
        END;
        GO
        CREATE PROC Test_2  AS
        BEGIN;
          PRINT '2'
        END;
        GO
        SELECT * FROM sys.objects WHERE name LIKE 'Test%'  AND   TYPE = 'P';
        DECLARE @Stmt NVARCHAR(MAX);
        SET @Stmt = ( SELECT 'DROP PROC ' + STUFF (x.Stmt, 1, 2, SPACE(0))
                      FROM  (SELECT ', ' + SCHEMA_NAME(Obj.Schema_ID) + CHAR(46) + Obj.Name
                             FROM   sys.objects AS Obj
                             WHERE  Obj.name LIKE 'Test%' 
                              AND   obj.TYPE = 'P'
                             FOR XML PATH ('')
                            ) AS X (Stmt)
                    );
        SELECT @Stmt;
        EXEC sp_ExecuteSQL @Stmt;
        SELECT * FROM sys.objects WHERE name LIKE 'Test%'  AND   TYPE = 'P';
        ROLLBACK;
        

        【讨论】:

          【解决方案5】:

          【讨论】:

          • 请注意,不鼓励link-only answers,所以答案应该是搜索解决方案的终点(与另一个参考文献的中途停留相比,随着时间的推移往往会变得陈旧)。请考虑在此处添加独立的概要,并保留链接作为参考。
          猜你喜欢
          • 2014-01-11
          • 1970-01-01
          • 2011-04-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多