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;