Ако имате множество вложени IF блокове, тогава SQL Server ще може да съхранява планове за изпълнение. Предполагам, че IF са ясни, напр. АКО @Parameter1 НЕ Е NULL
Отговорът на SchmitzIT е правилен, че SQL Server може също да съхранява пътеки за изпълнение за Dynamic SQL. Това обаче е вярно само ако sql е правилно изграден и изпълнен.
Под правилно изграден имам предвид изрично деклариране на параметрите и предаването им на sp_executesql. Например
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
Както можете да видите, текстът на sqlcommand не кодира твърдо стойностите на параметрите, които да се използват. Те се предават отделно в exec sp_executesql
Ако пишете лош стар динамичен sqL
set @sqlcommand = N'Select Something from Table where Field1 = ' + @Param1 + ' AND Field2 = ' + @Param2
exec sp_executesql @sqlcommand
тогава SQL Server няма да може да съхранява планове за изпълнение