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