Não está muito claro qual é o objetivo do seu procedimento de wrapper (auditoria? depuração?), e parece uma solução muito complicada. Se você explicar por que deseja fazer isso, alguém pode ter uma solução completamente diferente e, esperançosamente, melhor.
O maior problema com sua proposta é que você só pode passar parâmetros como strings e isso significa que você precisa lidar com todos os problemas de escape, conversão/formatação de dados e injeção de SQL que vêm com SQL dinâmico . Seria muito melhor chamar cada procedimento diretamente, passando parâmetros digitados corretamente de seu código de chamada.
Dito tudo isso, se você realmente quiser fazer isso, pode fazer algo assim:
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
Você também deve dar uma olhada em sp_executesql , que faz quase exatamente o que você deseja, mas também precisa ter todos os tipos de dados de parâmetro, o que você diz não ser possível em seu cenário.