2016-08-03 93 views
2

我有一個#temp表,其中有存儲過程的名稱。DROP PROCEDURE拋出語法錯誤

DECLARE @object VARCHAR(200) 
SET @object = (SELECT Top 1 Te.[this Object...] From #Temp Te) 

IF OBJECT_ID(@object) IS NOT NULL 
    DROP PROCEDURE @object 

但在最後一步,我得到錯誤

附近有語法錯誤@object「。

這是因爲@objectVARCHAR類型還是什麼?

這是SQL Server 2012

+2

使用EXEC運行,你有一個字符串中構建一個SQL DROP語句 - 對象標識符/名稱不能是變量。 –

回答

4

更換@stored_procedure_name你不能那樣做。你需要使用動態sql。 喜歡的東西:

DECLARE @object NVARCHAR(200) 
DECLARE @sql NVARCHAR(max) 
SET @object = (SELECT Top 1 Te.[this Object...] From #Temp Te) 
IF OBJECT_ID(@object) IS NOT NULL 
BEGIN 
    SET @sql = 'DROP PROCEDURE ' + @object 
    sp_executesql @sql 
END 
0

DROP過程需要的對象不是VARCHAR

嘗試:

EXECUTE ('DROP PROCEDURE ' + @object)