sybase «процедура отбрасывания».можно заставить его взять параметр вместо голого имени процесса? - PullRequest
1 голос
/ 03 мая 2010

Happy Monday o /

Я хочу сделать следующее в хранимой процедуре

  select @parameter="fooproc"
  drop procedure @parameter

вместо

  drop procedure fooproc

Но он задыхается от синтаксической ошибки. Есть ли способ, которым я могу согнуть это по своей воле? Я бы ожидал, что смогу сделать это.

Я пробовал несколько перестановок объявления типа @parameter безрезультатно.

Мысли

Ответы [ 2 ]

2 голосов
/ 03 мая 2010

Только с динамическим 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
0 голосов
/ 03 июня 2010
EXECUTE IMMEDIATE 'drop procedure ' || @parameter;
...