No está realmente claro cuál es el punto de su procedimiento de contenedor (¿auditoría? ¿Depuración?), Y parece una solución muy incómoda. Si explica por qué quiere hacer esto, alguien puede tener una solución completamente diferente y, con suerte, mejor.
El mayor problema con su propuesta es que solo puede pasar parámetros como cadenas y eso significa que tiene que manejar todos los problemas de escape, conversión/formato de datos e inyección SQL que vienen con SQL dinámico . Sería mucho mejor llamar a cada procedimiento directamente, pasando los parámetros escritos correctamente desde su código de llamada.
Habiendo dicho todo eso, si realmente quieres hacerlo, entonces puedes hacer algo como esto:
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
También debería echar un vistazo a sp_executesql , que hace casi exactamente lo que desea, pero también debe tener todos los tipos de datos de parámetros, lo que dice que no es posible en su escenario.