Det er ikke helt klart, hvad meningen med din indpakningsprocedure er (revision? fejlretning?), og det virker som en meget akavet løsning. Hvis du forklarer, hvorfor du vil gøre dette, kan nogen have en helt anden og forhåbentlig bedre løsning.
Det største problem med dit forslag er, at du kun kan sende parametre som strenge, og det betyder, at du skal håndtere alle de escape-, datakonverterings-/formaterings- og SQL-injektionsproblemer, der følger med dynamisk SQL . Det ville være meget bedre at kalde hver procedure direkte ved at sende korrekt indtastede parametre fra din kaldekode.
Når alt det er sagt, hvis du virkelig vil gøre det, kan du gøre sådan noget:
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
Du bør også tage et kig på sp_executesql , som gør næsten præcis, hvad du vil, men den skal også have alle parameterdatatyperne, hvilket du siger ikke er muligt i dit scenarie.