Не е съвсем ясно какъв е смисълът на вашата процедура за обвиване (одит? отстраняване на грешки?) и изглежда като много неудобно решение. Ако обясните защо искате да направите това, някой може да има напълно различно и надяваме се по-добро решение.
Най-големият проблем с вашето предложение е, че можете да предавате параметри само като низове и това означава, че трябва да се справите с всички проблеми с екранирането, преобразуването/форматирането на данни и 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 , което прави почти точно това, което искате, но трябва да има и всички типове параметрични данни, което според вас не е възможно във вашия сценарий.