我有一组名称为“somename_%”的存储过程。是否有任何的方式来删除SP有一个查询,forexample按名称删除存储过程组
DROP PROCEDURE其中名称一样 'somename_%'
。
我有一组名称为“somename_%”的存储过程。是否有任何的方式来删除SP有一个查询,forexample按名称删除存储过程组
DROP PROCEDURE其中名称一样 'somename_%'
。
这适用于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)
它很棒! – Kate 2010-03-15 09:29:06
好东西。也许它会有点整齐使用QUOTENAME函数而不是连接,但很高兴它可以工作! – 2010-03-15 09:33:17
的方式,我总是倾向于做这类事情用我的critierion只是提取系统表列表中的程序,然后创建命令列表 - 无论是直接在SQL中,例如SELECT 'DROP PROCEDURE ' + procName FROM system_procedures_table WHERE procName like...
或在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 – Kate 2010-03-15 09:28:46
对不起,我应该知道。 – 2010-03-16 00:28:45
在MS_SQL-Server,则创建cn的所有相关手续到(AB)放弃一个语句中使用 “FOR XML PATH( '')” 的条款...
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;
请注意,[只有链接的答案](http://meta.stackoverflow.com/tags/link-only-answers/info)不鼓励,所以答案应该是搜索解决方案的终点(vs.而另一个引用的中途停留时间往往会随着时间推移而过时)。请考虑在此添加独立的摘要,并将链接保留为参考。 – kleopatra 2014-02-12 11:02:40
您使用的数据库是? – hallie 2010-03-15 09:17:31