Sql sybase';删除过程';。我能让它接受一个参数而不是一个裸进程名吗?

Sql sybase';删除过程';。我能让它接受一个参数而不是一个裸进程名吗?,sql,stored-procedures,parameters,sybase,Sql,Stored Procedures,Parameters,Sybase,星期一快乐/ 我希望在存储过程中执行以下操作 select @parameter="fooproc" drop procedure @parameter 而不是 drop procedure fooproc 但是它被语法错误阻塞了。有什么办法可以让我的意志屈服吗?我本希望能做到这一点 我尝试了@parameter类型声明的一些排列,但没有成功 想法?仅使用动态SQL: DECLARE @sql AS VARCHAR(2000) SELECT @sql = STR_REPLACE

星期一快乐/

我希望在存储过程中执行以下操作

  select @parameter="fooproc"
  drop procedure @parameter
而不是

  drop procedure fooproc
但是它被语法错误阻塞了。有什么办法可以让我的意志屈服吗?我本希望能做到这一点

我尝试了@parameter类型声明的一些排列,但没有成功

想法?

仅使用动态SQL:

DECLARE @sql AS VARCHAR(2000)

SELECT @sql = STR_REPLACE('drop procedure {@parameter}', '{@parameter}', @parameter)

EXEC ( @sql )
在执行类似操作之前,我喜欢根据数据库元数据验证对象名称。这可以防止前面的错误,甚至在后面的动态部分中的注入

i、 e.类似于:

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = @parameter)
BEGIN
    DECLARE @sql AS VARCHAR(2000)
    SELECT @sql = STR_REPLACE('drop procedure {@parameter}', '{@parameter}', @parameter)
    EXEC ( @sql )
END

差不多;)在sybase中是:STR_REPLACE。(为了简洁起见,我省略了我进行验证的部分,因为这是有效的;-)谢谢o/@Michael Wilson,我确信它们在Transact-SQL的两种方言上都是相同的;-)完全合理的假设;)
EXECUTE IMMEDIATE 'drop procedure ' || @parameter;