Nó không thực sự rõ ràng điểm của thủ tục trình bao bọc của bạn là gì (kiểm toán? Gỡ lỗi?) Và nó có vẻ như là một giải pháp rất khó xử. Nếu bạn giải thích lý do tại sao bạn muốn làm điều này, ai đó có thể có một giải pháp hoàn toàn khác và hy vọng tốt hơn.
Vấn đề lớn nhất với đề xuất của bạn là bạn chỉ có thể chuyển các tham số dưới dạng chuỗi và điều đó có nghĩa là bạn phải xử lý tất cả các vấn đề thoát, chuyển đổi / định dạng dữ liệu và chèn SQL đi kèm với SQL động . Sẽ tốt hơn nhiều nếu gọi trực tiếp từng thủ tục, chuyển các tham số được nhập chính xác từ mã gọi của bạn.
Đã nói tất cả những điều đó, nếu bạn thực sự muốn làm điều đó thì bạn có thể làm như sau:
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
Bạn cũng nên xem sp_executesql , gần như chính xác những gì bạn muốn, nhưng nó cũng cần phải có tất cả các kiểu dữ liệu tham số, điều mà bạn cho rằng không thể thực hiện được trong trường hợp của bạn.