sql >> Database >  >> RDS >> Sqlserver

Dynamische parameters doorgeven aan een opgeslagen procedure in SQL Server 2008

Het is niet echt duidelijk wat het punt van uw wrapper-procedure is (controleren? debuggen?) En het lijkt een erg onhandige oplossing. Als je uitlegt waarom je dit wilt doen, heeft iemand misschien een heel andere en hopelijk betere oplossing.

Het grootste probleem met uw voorstel is dat u parameters alleen als tekenreeksen kunt doorgeven en dat betekent dat u alle problemen met ontsnapping, gegevensconversie/opmaak en SQL-injectie moet afhandelen die gepaard gaan met dynamische SQL . Het zou veel beter zijn om elke procedure rechtstreeks aan te roepen, waarbij u correct getypte parameters uit uw oproepcode doorgeeft.

Dat gezegd hebbende, als je het echt wilt doen, kun je zoiets als dit doen:

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

Bekijk ook sp_executesql , die bijna precies doet wat u wilt, maar het moet ook alle parametergegevenstypen hebben, wat volgens u niet mogelijk is in uw scenario.



  1. mySQL-query voor het selecteren van kinderen

  2. Back-uplijst voor SQL Server 2008-onderhoudsplan

  3. Optimaliseer een UNION mysql-query

  4. Controleer uw SQLite-versie