sql >> Database teknologi >  >> RDS >> Sqlserver

Overførsel af dynamiske parametre til en lagret procedure i SQL Server 2008

Det er ikke helt klart, hvad meningen med din indpakningsprocedure er (revision? fejlretning?), og det virker som en meget akavet løsning. Hvis du forklarer, hvorfor du vil gøre dette, kan nogen have en helt anden og forhåbentlig bedre løsning.

Det største problem med dit forslag er, at du kun kan sende parametre som strenge, og det betyder, at du skal håndtere alle de escape-, datakonverterings-/formaterings- og SQL-injektionsproblemer, der følger med dynamisk SQL . Det ville være meget bedre at kalde hver procedure direkte ved at sende korrekt indtastede parametre fra din kaldekode.

Når alt det er sagt, hvis du virkelig vil gøre det, kan du gøre sådan noget:

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

Du bør også tage et kig på sp_executesql , som gør næsten præcis, hvad du vil, men den skal også have alle parameterdatatyperne, hvilket du siger ikke er muligt i dit scenarie.



  1. MySQL Hibernate-forbindelsesproblem under brug af c3p0

  2. PHP bindParam virker ikke med en PARAM_INT ud parameter

  3. Databaseforbindelsesstreng og sortering

  4. mysqldump bedste praksis:Del 1 – MySQL-forudsætninger