Если у вас есть несколько вложенных блоков IF, SQL Server сможет хранить планы выполнения. Я предполагаю, что IF просты, например. ЕСЛИ @Parameter1 НЕ НУЛЬ
Ответ SchmitzIT верен, что SQL Server также может хранить пути выполнения для динамического 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 не сможет хранить планы выполнения
person
DeanOC
schedule
07.11.2012