Sql 按名称删除存储过程组

Sql 按名称删除存储过程组,sql,tsql,stored-procedures,Sql,Tsql,Stored Procedures,我有一组名为'somename\%'的存储过程。例如,是否有任何方法可以通过一个查询删除该SP 将程序放在名称类似的位置 “somename”\uu3% .这适用于MSSQL 2005+ DECLARE @DropScript varchar(max) set @DropScript = '' SELECT @DropScript = @DropScript + 'DROP PROCEDURE [' + schema_name(schema_id)+ '].' + '[' + name + '

我有一组名为'somename\%'的存储过程。例如,是否有任何方法可以通过一个查询删除该SP

将程序放在名称类似的位置 “somename”\uu3%


.

这适用于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)

我总是倾向于这样做,即使用我的critierion从系统表中提取列表过程,然后创建命令列表-可以直接使用sql,例如,
选择“DROP PROCEDURE”+procName from system\u procedures\u table,其中procName像…
或在Excel中。您可以通过查询生成DDL数据字典。例如,在Oracle中:

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

在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;

.

请注意,这是不鼓励的,因此答案应该是搜索解决方案的终点(而不是参考文献的另一个中途停留,随着时间的推移往往会过时)。请考虑在这里添加一个独立的概要,保持链接作为参考。它对我也很有用。从一个蹩脚的程序安装中删除了大约200个sp!Thnx!