Non è molto chiaro quale sia lo scopo della tua procedura wrapper (auditing? debugging?) E sembra una soluzione molto imbarazzante. Se spieghi perché vuoi farlo, qualcuno potrebbe avere una soluzione completamente diversa e, si spera, migliore.
Il problema più grande con la tua proposta è che puoi passare parametri solo come stringhe e ciò significa che devi gestire tutti i problemi di escaping, conversione/formattazione dei dati e SQL injection che vengono con SQL dinamico . Sarebbe molto meglio chiamare direttamente ciascuna procedura, passando i parametri digitati correttamente dal codice chiamante.
Detto questo, se vuoi davvero farlo, puoi fare qualcosa del genere:
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
Dovresti anche dare un'occhiata a sp_executesql , che fa quasi esattamente quello che vuoi, ma deve avere anche tutti i tipi di dati dei parametri, cosa che secondo te non è possibile nel tuo scenario.