Nie jest do końca jasne, jaki jest cel twojej procedury opakowującej (audyt? debugowanie?) i wydaje się to bardzo niewygodnym rozwiązaniem. Jeśli wyjaśnisz, dlaczego chcesz to zrobić, ktoś może mieć zupełnie inne i, miejmy nadzieję, lepsze rozwiązanie.
Największym problemem związanym z twoją propozycją jest to, że możesz przekazywać parametry tylko jako ciągi, co oznacza, że musisz poradzić sobie ze wszystkimi problemami związanymi z ucieknięciem, konwersją/formatowaniem danych i wstrzykiwaniem SQL, które są związane z dynamiczny SQL . O wiele lepiej byłoby wywołać każdą procedurę bezpośrednio, przekazując poprawnie wpisane parametry z kodu wywołującego.
Powiedziawszy to wszystko, jeśli naprawdę chcesz to zrobić, możesz zrobić coś takiego:
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
Powinieneś także spojrzeć na sp_executesql , który robi prawie dokładnie to, co chcesz, ale musi również zawierać wszystkie typy danych parametrów, co według Ciebie nie jest możliwe w Twoim scenariuszu.