Я хочу смочь передать от имени хранимой процедуры как строка в другую хранимую процедуру и назвать ее с динамическими параметрами. Я получаю ошибку все же.
Конкретно я попробовал:
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' хорошо работает.
вам нужны круглые скобки
exec (@sp_str)
, если процедура не существует, сообщение будет таким
Msg 2812, Level 16, State 62, Line 1 Не удалось найти хранимую процедуру test.
это не будет Не удалось найти хранимую процедуру 'test' a ',' b ''
Хотя SQL-инъекция все еще плохая идея, попробуйте использовать sp_executeSQL и параметры, см. Здесь о повторном использовании плана запроса : Изменение exec на sp_executesql не дает никаких преимуществ, если вы неправильно используете параметры
Следует использовать процедуру sp_executesql. Посмотрите MSDN - sp_executesql .