Si tiene varios bloques IF anidados, SQL Server podrá almacenar planes de ejecución. Supongo que los IF son sencillos, por ejemplo. SI @Parameter1 NO ES NULO
La respuesta de SchmitzIT es correcta, ya que SQL Server también puede almacenar rutas de ejecución para Dynamic SQL. Sin embargo, esto solo es cierto si el sql se construye y ejecuta correctamente.
Por construido correctamente, me refiero a declarar explícitamente los parámetros y pasarlos a sp_executesql. Por ejemplo
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
Como puede ver, el texto de sqlcomand no codifica los valores de los parámetros que se van a usar. Se pasan por separado en el exec sp_executesql
Si escribe mal viejo sqL dinámico
set @sqlcommand = N'Select Something from Table where Field1 = ' + @Param1 + ' AND Field2 = ' + @Param2
exec sp_executesql @sqlcommand
entonces SQL Server no podrá almacenar planes de ejecución