Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Melewati parameter dinamis ke prosedur tersimpan di SQL Server 2008

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengalami masalah dengan penyimpanan UTF-8 di NVarChar di SQL Server 2008

  2. Bagaimana cara mengatur baris default untuk kueri yang tidak mengembalikan baris?

  3. Lingkaran SQL Server

  4. Cara Membangun Kembali Basis Data Master di SQL Server dengan Mudah

  5. Izin untuk PSExec dijalankan dari pekerjaan SQL