2016-08-03 102 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)