我正在使用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'附近的语法不正确。
答案 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按“删除”按钮,然后单击“确定”。
答案 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%'
复制结果并执行。这就是全部。