【问题标题】:DROP PROCEDURE throws syntax errorDROP PROCEDURE 抛出语法错误
【发布时间】:2016-08-03 12:47:57
【问题描述】:

我有一个#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”附近的语法不正确。

这是因为@objectVARCHAR 类型还是什么?

这适用于 SQL Server 2012

【问题讨论】:

  • 使用 EXEC 运行您在字符串中构建的 SQL DROP 语句 - 对象标识符/名称不能是变量。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    看看这里:

    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);
    

    你可以用@object替换@stored_procedure_name

    【讨论】:

      【解决方案3】:

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

      尝试:

      EXECUTE ('DROP PROCEDURE ' + @object)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-31
        • 2023-03-20
        • 2019-11-02
        • 1970-01-01
        • 1970-01-01
        • 2019-03-30
        • 1970-01-01
        相关资源
        最近更新 更多