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

Dynamisk SQL og stored procedure optimering

Hvis du har flere indlejrede IF-blokke, vil SQL Server være i stand til at gemme eksekveringsplaner. Jeg går ud fra, at IF'erne er ligetil, f.eks. HVIS @Parameter1 IKKE ER NULL

SchmitzITs svar er korrekt, at SQL Server også kan gemme eksekveringsstier til Dynamic SQL. Dette er dog kun sandt, hvis sql er korrekt bygget og udført.

Med korrekt bygget mener jeg eksplicit at erklære parametrene og sende dem til sp_executesql. For eksempel

declare @Param1 nvarchar(255) = 'foo'
        ,@Param2 nvarchar(255) = 'bar'
        ,@sqlcommand nvarchar(max)
        ,@paramList nvarchar(max)

set @paramList = '@Param1 nvarchar(255), @Param2 nvarchar(255)'
set @sqlcommand = N'Select Something from Table where Field1 = @Param1 AND Field2 = @Param2'

exec sp_executesql @statement = @sqlcommand
                  ,@params = @paramList
                  ,@Param1 = @Param1
                  ,@Param2 = @Param2

Som du kan se, hardkoder sqlcommand-teksten ikke de parameterværdier, der skal bruges. De sendes separat i exec sp_executesql

Hvis du skriver dårlig gammel dynamisk sqL

set @sqlcommand = N'Select Something from Table where Field1 = ' + @Param1  + ' AND Field2 = ' + @Param2

exec sp_executesql @sqlcommand

så vil SQL Server ikke være i stand til at gemme eksekveringsplaner



  1. Med henvisning til et udvalgt aggregeret kolonnealias i have-sætningen i Postgres

  2. Udforskning af de forskellige begrænsninger i SQL Server

  3. Billeder som links i MySQL-database?

  4. Hvordan laver jeg en masseopdatering i mySQL ved hjælp af node.js