Только с динамическим SQL:
DECLARE @sql AS VARCHAR(2000)
SELECT @sql = STR_REPLACE('drop procedure {@parameter}', '{@parameter}', @parameter)
EXEC ( @sql )
Мне нравится проверять имена объектов по метаданным базы данных, прежде чем делать подобные вещи. Это защищает от ошибок заранее и даже от впрыска в последующем динамическом разделе.
т.е. что-то вроде:
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