Det är inte riktigt klart vad poängen med ditt omslagsförfarande är (revision? felsökning?), och det verkar vara en mycket besvärlig lösning. Om du förklarar varför du vill göra detta kan någon ha en helt annan och förhoppningsvis bättre lösning.
Det största problemet med ditt förslag är att du bara kan skicka parametrar som strängar och det betyder att du måste hantera alla problem med escape, datakonvertering/formatering och SQL-injektion som följer med dynamisk SQL . Det skulle vara mycket bättre att anropa varje procedur direkt och skicka korrekt skrivna parametrar från din anropskod.
Med det sagt, om du verkligen vill göra det kan du göra något så här:
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 också ta en titt på sp_executesql , som gör nästan exakt vad du vill, men den måste ha alla parameterdatatyper också, vilket du säger inte är möjligt i ditt scenario.