Jeśli masz wiele zagnieżdżonych bloków IF, SQL Server będzie mógł przechowywać plany wykonania. Zakładam, że IF są proste, np. JEŚLI @Parameter1 NIE JEST NULL
Odpowiedź SchmitzIT jest prawidłowa, że SQL Server może również przechowywać ścieżki wykonania dla Dynamic SQL. Jednak jest to prawdą tylko wtedy, gdy sql jest poprawnie skompilowane i wykonane.
Prawidłowo zbudowany, mam na myśli jawne zadeklarowanie parametrów i przekazanie ich do sp_executesql. Na przykład
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
Jak widać, tekst polecenia sqlcommand nie koduje na stałe wartości parametrów do użycia. Są one przekazywane osobno w exec sp_executesql
Jeśli piszesz zły stary dynamiczny sqL
set @sqlcommand = N'Select Something from Table where Field1 = ' + @Param1 + ' AND Field2 = ' + @Param2
exec sp_executesql @sqlcommand
wtedy SQL Server nie będzie w stanie przechowywać planów wykonania