Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Przekazywanie parametrów dynamicznych do procedury składowanej w SQL Server 2008

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server Konwertuj Varchar na Datetime

  2. Przykłady ABS() w SQL Server

  3. Model Entity Framework wiele-wiele plus relacja współdzielona

  4. Liczenie DISTINCT w wielu kolumnach

  5. Łączna liczba SQL