Als u meerdere geneste IF-blokken hebt, kan SQL Server uitvoeringsplannen opslaan. Ik ga ervan uit dat de IF's eenvoudig zijn, bijv. ALS @Parameter1 NIET NULL IS
Het antwoord van SchmitzIT is correct dat SQL Server ook uitvoeringspaden voor Dynamic SQL kan opslaan. Dit is echter alleen waar als de sql correct is gebouwd en uitgevoerd.
Met goed gebouwd bedoel ik het expliciet declareren van de parameters en doorgeven aan sp_executesql. Bijvoorbeeld
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
Zoals u kunt zien, codeert de sqlcommand-tekst de te gebruiken parameterwaarden niet. Ze worden afzonderlijk doorgegeven in de exec sp_executesql
Als je slechte oude dynamische sqL schrijft
set @sqlcommand = N'Select Something from Table where Field1 = ' + @Param1 + ' AND Field2 = ' + @Param2
exec sp_executesql @sqlcommand
dan kan SQL Server geen uitvoeringsplannen opslaan