Wenn Sie mehrere verschachtelte IF-Blöcke haben, kann SQL Server Ausführungspläne speichern. Ich gehe davon aus, dass die IFs einfach sind, z. WENN @Parameter1 NICHT NULL IST
Die Antwort von SchmitzIT ist richtig, dass SQL Server auch Ausführungspfade für Dynamic SQL speichern kann. Dies gilt jedoch nur, wenn die SQL ordnungsgemäß erstellt und ausgeführt wird.
Mit richtig gebaut meine ich, dass die Parameter explizit deklariert und an sp_executesql übergeben werden. Zum Beispiel
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
Wie Sie sehen können, sind die zu verwendenden Parameterwerte im sqlcommand-Text nicht fest codiert. Sie werden separat im exec sp_executesql
übergebenWenn Sie schlechtes altes dynamisches SQL schreiben
set @sqlcommand = N'Select Something from Table where Field1 = ' + @Param1 + ' AND Field2 = ' + @Param2
exec sp_executesql @sqlcommand
dann kann SQL Server keine Ausführungspläne speichern