Tidak begitu jelas apa gunanya prosedur pembungkus Anda (audit? debugging?), Dan sepertinya solusi yang sangat canggung. Jika Anda menjelaskan mengapa Anda ingin melakukan ini, seseorang mungkin memiliki solusi yang sama sekali berbeda dan semoga lebih baik.
Masalah terbesar dengan proposal Anda adalah bahwa Anda hanya dapat meneruskan parameter sebagai string dan itu berarti Anda harus menangani semua pelolosan, konversi/pemformatan data, dan masalah injeksi SQL yang menyertai SQL dinamis . Akan jauh lebih baik untuk memanggil setiap prosedur secara langsung, melewati parameter yang diketik dengan benar dari kode panggilan Anda.
Setelah mengatakan semua itu, jika Anda benar-benar ingin melakukannya, Anda dapat melakukan sesuatu seperti ini:
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
Anda juga harus melihat sp_executesql , yang melakukan hampir persis seperti yang Anda inginkan, tetapi juga harus memiliki semua tipe data parameter, yang menurut Anda tidak mungkin dalam skenario Anda.