Není ve skutečnosti jasné, jaký smysl má váš obalový postup (audit? ladění?), a zdá se to jako velmi nepříjemné řešení. Pokud vysvětlíte, proč to chcete udělat, někdo může mít úplně jiné a doufejme, že lepší řešení.
Největší problém s vaším návrhem je, že můžete předávat parametry pouze jako řetězce, a to znamená, že musíte zvládnout všechny problémy s escapováním, konverzí/formátováním dat a vkládáním SQL, které přicházejí s dynamické SQL . Bylo by mnohem lepší volat každou proceduru přímo a předat správně zadané parametry z vašeho volacího kódu.
Po tom všem, pokud to opravdu chcete udělat, můžete udělat něco takového:
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
Měli byste se také podívat na sp_executesql , který dělá téměř přesně to, co chcete, ale musí mít také všechny datové typy parametrů, což podle vás není ve vašem scénáři možné.