Jika Anda memiliki beberapa blok IF bersarang maka SQL Server akan dapat menyimpan rencana eksekusi. Saya berasumsi bahwa IF sangat mudah, mis. JIKA @Parameter1 BUKAN NULL
Jawaban SchmitzIT benar bahwa SQL Server juga dapat menyimpan jalur eksekusi untuk SQL Dinamis. Namun ini hanya benar jika sql dibangun dan dijalankan dengan benar.
Dengan dibangun dengan benar, maksud saya secara eksplisit mendeklarasikan parameter dan meneruskannya ke sp_executesql. Misalnya
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
Seperti yang Anda lihat, teks sqlcommand tidak membuat hardcode nilai paramer untuk digunakan. Mereka dilewatkan secara terpisah di exec sp_executesql
Jika Anda menulis sql dinamis lama yang buruk
set @sqlcommand = N'Select Something from Table where Field1 = ' + @Param1 + ' AND Field2 = ' + @Param2
exec sp_executesql @sqlcommand
maka SQL Server tidak akan dapat menyimpan rencana eksekusi