Sql-Server
如何刪除名稱在變數中的儲存過程?
給定一個包含儲存過程名稱的變數:
DECLARE @stored_procedure_name sysname; SET @stored_procedure_name = 'some_stored_procedure_name';
如何刪除儲存過程?
為此,您必須使用動態 SQL,因為該語句
DROP PROCEDURE
無法參數化。順便說一句,始終對對象名稱進行模式限定是一種好習慣。您沒有在問題中指定架構名稱(或者說變數包含完整的點分隔名稱),所以我繼續擴展您要求包含它的內容。
DECLARE @stored_procedure_schema sysname = NULL; DECLARE @stored_procedure_name sysname = N'some_stored_procedure_name'; DECLARE @sql nvarchar(MAX) = N'DROP PROCEDURE ' + ISNULL(QUOTENAME(@stored_procedure_schema) + N'.', N'') + QUOTENAME(@stored_procedure_name) + N';'; EXEC(@sql);
在嘗試刪除它之前,這不會檢查該過程是否實際存在,因此如果它不存在,您將收到錯誤消息。使用它來檢查是否存在是微不足道的
sys.procedures
,所以我沒有打擾它,你也沒有要求它。要搶先回答您對其他答案的評論,
QUOTENAME
將正確轉義任何對象名稱,使其最終被方括號包圍。具體來說,是的,這確實處理過程名稱本身中的單引號(和方括號)。