Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Truyền các tham số động cho một thủ tục được lưu trữ trong SQL Server 2008

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạm dừng sao chép máy chủ SQL

  2. Cách thực thi các gói dtsx thông qua dòng lệnh

  3. Làm cách nào để chọn một hàng biến trong SQL Server?

  4. Vấn đề về hàm Sql Câu lệnh cuối cùng được bao gồm trong một hàm phải là câu lệnh trả về

  5. ABS () Ví dụ trong SQL Server