2

我正在使用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
Incorrect syntax near 'GO'.

+0

http://www.devasp.net/net/articles/display/309.html – Dhaval 2014-11-25 04:35:49

+0

USE spV400%NOT%spV400%。 – Veera 2014-11-25 04:36:52

回答

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 

這當然會給你一個列表,其中您可以複製並粘貼到SSMS並運行輸出的SQL命令。

+0

非常感謝。 – 2014-11-25 04:35:54

+0

順便說一下,過濾器不會找到SP_V400。 – 2014-11-25 04:36:38

+0

我發現這是一個非常有用的查詢! – 2017-01-05 09:29:09

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關鍵字。

+0

這不起作用,因爲GO語句仍然處於SQL語句的中間,使得它在語法上不正確。如果你真的需要一個GO,它應該在ORDER BY之後的一個新行中結束。 – 2017-01-06 02:57:33

0

這是我的方法,

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

複製的結果和執行。就這樣。