Не совсем понятно, в чем смысл вашей процедуры-оболочки (одитинг? Отладка?), И это кажется очень неловким решением. Если вы объясните, почему вы хотите это сделать, у кого-то может быть совершенно другое и, надеюсь, лучшее решение.
Самая большая проблема в вашем предложении заключается в том, что вы можете передавать параметры только в виде строк, а это означает, что вы должны решить все проблемы с экранированием, преобразованием / форматированием данных и внедрением SQL, которые поставляются с динамическим SQL . Было бы намного лучше вызывать каждую процедуру напрямую, передавая правильно набранные параметры из вашего вызывающего кода.
Сказав все это, если вы действительно хотите это сделать, вы можете сделать что-то вроде этого:
create proc dbo.ExecuteProcedure
@ProcedureName sysname,
@Parameters nvarchar(max),
@Debug bit = 0x0,
@Execute bit = 0x1
as
set nocount on
begin
declare @sql nvarchar(max)
set @sql = 'exec ' + quotename(@ProcedureName) + ' ' + @Parameters
if @Debug = 0x1 print @sql
if @Execute = 0x1 exec(@sql)
end
go
exec dbo.ExecuteProcedure 'dbo.SomeProc', '@p1 = 1, @p2 = ''themhz''s proc''', 0x1, 0x0
Вам также следует взглянуть на sp_executesql , который делает почти точно то, что вы хотите, но для этого также должны быть все типы данных параметров, что, по вашим словам, невозможно в вашем сценарии.