Sql-Server

如何刪除名稱在變數中的儲存過程?

  • July 29, 2013

給定一個包含儲存過程名稱的變數:

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將正確轉義任何對象名稱,使其最終被方括號包圍。具體來說,是的,這確實處理過程名稱本身中的單引號(和方括號)。

引用自:https://dba.stackexchange.com/questions/47186