2010-05-31 3 views
4

Я хочу иметь возможность передать имя хранимой процедуры в виде строки в другую хранимую процедуру и вызвать ее с динамическими параметрами. Однако я получаю сообщение об ошибке.Динамически вызывать хранимую процедуру из другой хранимой процедуры

В частности, я попытался:

create procedure test @var1 varchar(255), @var2 varchar(255) as 
    select 1 

create procedure call_it @proc_name varchar(255) 
    as 
    declare @sp_str varchar(255) 
    set @sp_str = @proc_name + ' ''a'',''b''' 
    print @sp_str 
    exec @sp_str 

exec call_it 'test' 

Так процедура call_it должен вызвать тест процедуру с аргументами 'а' и 'B'.

Когда я запускаю приведенный выше код я получаю:

Msg 2812, Level 16, State 62, Procedure call_it, Line 6 
Could not find stored procedure 'test 'a','b''. 

Однако выполнение теста 'A', 'B' работает отлично.

ответ

7

вам нужно круглые скобки

exec (@sp_str) 

если прок не существует сообщение будет это

Msg 2812, уровень 16, состояние 62, строка 1 Не удалось найти хранимую процедуру «тест ».

это не было бы не удалось найти хранимую процедуру «тест„а“,» б «»

Хотя по-прежнему плохая идея с инъекцией SQL, попробуйте использовать параметры sp_executesql и использовать, смотрите здесь о запросе повторное использование плана: Changing exec to sp_executesql doesn't provide any benefit if you are not using parameters correctly

Смежные вопросы