Si vous avez plusieurs blocs IF imbriqués, SQL Server pourra stocker des plans d'exécution. Je suppose que les IF sont simples, par exemple. SI @Paramètre1 N'EST PAS NULL
La réponse de SchmitzIT est correcte que SQL Server peut également stocker les chemins d'exécution pour Dynamic SQL. Cependant, cela n'est vrai que si le sql est correctement construit et exécuté.
Par correctement construit, je veux dire déclarer explicitement les paramètres et les transmettre à sp_executesql. Par exemple
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
Comme vous pouvez le voir, le texte de la commande sql ne code pas en dur les valeurs des paramètres à utiliser. Ils sont passés séparément dans l'exec sp_executesql
Si vous écrivez un mauvais vieux sqL dynamique
set @sqlcommand = N'Select Something from Table where Field1 = ' + @Param1 + ' AND Field2 = ' + @Param2
exec sp_executesql @sqlcommand
alors SQL Server ne pourra pas stocker les plans d'exécution