Динамично назовите хранимую процедуру из другой хранимой процедуры

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

Конкретно я попробовал:

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'.

Когда я выполняю вышеупомянутый код, я добираюсь:

Сообщение 2812, Уровень 16, состояние 62, Процедура call_it, Строка 6 не Могли показать, что хранимая процедура 'тестирует, 'b''.

Однако запуская тест, 'b' хорошо работает.

6
задан Lukasz Szozda 9 June 2018 в 15:44
поделиться

2 ответа

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

exec (@sp_str)

, если процедура не существует, сообщение будет таким

Msg 2812, Level 16, State 62, Line 1 Не удалось найти хранимую процедуру test.

это не будет Не удалось найти хранимую процедуру 'test' a ',' b ''

Хотя SQL-инъекция все еще плохая идея, попробуйте использовать sp_executeSQL и параметры, см. Здесь о повторном использовании плана запроса : Изменение exec на sp_executesql не дает никаких преимуществ, если вы неправильно используете параметры

8
ответ дан 9 December 2019 в 22:30
поделиться

Следует использовать процедуру sp_executesql. Посмотрите MSDN - sp_executesql .

3
ответ дан 9 December 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: