Sql 按名称删除存储过程组
我有一组名为'somename\%'的存储过程。例如,是否有任何方法可以通过一个查询删除该SP 将程序放在名称类似的位置 “somename”\uu3%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 + '
.这适用于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!