如何删除一个数据库中的多个存储过程

时间:2014-11-25 04:23:14

标签: sql-server database sql-server-2008 select stored-procedures

我正在使用SQL Server 2008.我有一个数据库Training,其中包含两种类型的存储过程,其名称前缀为SP_V400_spV400_。现在我需要删除名称前缀为spV400_的存储过程。

我试过这个命令

SELECT 'DROP PROCEDURE [' + SCHEMA_NAME(p.schema_id) + '].[' + p.NAME + '] GO'
FROM sys.procedures p  
WHERE p.name LIKE '%spV400%'
ORDER BY p.name

但是我收到了一个错误:

  

Msg 102,Level 15,State 1,Line 1
  'GO'附近的语法不正确。

5 个答案:

答案 0 :(得分:4)

最后你不需要GO。

试试这个:

SELECT 'DROP PROCEDURE [' + SCHEMA_NAME(p.schema_id) + '].[' + p.NAME + ']'
FROM sys.procedures p  WHERE p.name like 'spV400%'
ORDER BY p.name

当然,这将为您提供输出中的SQL命令列表,您可以将其复制并粘贴到SSMS中并运行。

答案 1 :(得分:1)

SELECT 'DROP PROCEDURE [' + SCHEMA_NAME(p.schema_id) + '].[' + p.NAME + ']' as column into #tmptable 
FROM sys.procedures p  WHERE p.name like 'spV400%' 
ORDER BY p.name
declare @deleteAll nvarchar(max)
select @deleteAll = coalesce(@deleteAll + '; ', + '') + #tmptable.column from #tmptable
EXEC sp_executesql @deleteAll
drop table #tmptable

这会将所有存储过程名称插入temp表中,然后将其转换为以分号分隔的值并删除所有存储过程。

答案 2 :(得分:0)

1单击“存储过程选项卡”

2使用SQL的过滤功能过滤存储过程

3按Ctrl + A选择所有过程,系统表

除外

4按“删除”按钮,然后单击“确定”。

或找到链接http://www.devasp.net/net/articles/display/309.html

答案 3 :(得分:0)

GO 不是SQL cmd,它是一个Windows批处理终止符 所以它总是需要在单独的行中。您需要做的就是在代码中包含 char(10)以换行。

SELECT 'DROP PROCEDURE [' + SCHEMA_NAME(p.schema_id) + '].[' + p.NAME + ']'+char(10)+'GO'
FROM sys.procedures p  WHERE p.name like '%spV400%'
ORDER BY p.name

执行上述代码并将结果集复制粘贴到查询窗口中,以便用 GO 关键字执行。

答案 4 :(得分:0)

这是我的方法,

select 'DROP PROCEDURE ' + ROUTINE_SCHEMA + '.' + SPECIFIC_NAME
from    YourDBName.information_schema.routines 
where   routine_type = 'PROCEDURE' AND SPECIFIC_NAME like '%test%'

复制结果并执行。这就是全部。