DROP PROCEDURE抛出语法错误

时间:2016-08-03 12:47:57

标签: sql sql-server stored-procedures sql-server-2012

我有一个#temp表,其中包含存储过程的名称。

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'附近的语法不正确。

这是因为@object类型为VARCHAR还是什么?

这适用于SQL Server 2012

3 个答案:

答案 0 :(得分:4)

你不能那样做。你需要使用动态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

答案 1 :(得分:3)

看看这里:

https://dba.stackexchange.com/questions/47186/how-can-i-drop-a-stored-procedure-whose-name-is-in-a-variable

你需要编写一个sql语句并单独执行它。

部分答案:

declare @sql varchar(64);

set @sql = 'drop proc ' + @stored_procedure_name;

exec(@sql);

您可以将@stored_procedure_name替换为@object

答案 2 :(得分:0)

DROP PROCEDURE需要一个不是varchar的对象

尝试:

EXECUTE ('DROP PROCEDURE ' + @object)