Nếu bạn có nhiều khối IF lồng nhau thì SQL Server sẽ có thể lưu trữ các kế hoạch thực thi. Tôi giả sử rằng các IF là đơn giản, ví dụ:IF @ Tham số1 KHÔNG ĐẦY ĐỦ
Câu trả lời của SchmitzIT là đúng vì SQL Server cũng có thể lưu trữ các đường dẫn thực thi cho SQL động. Tuy nhiên, điều này chỉ đúng nếu sql được xây dựng và thực thi đúng cách.
Bằng cách xây dựng đúng cách, tôi có nghĩa là khai báo rõ ràng các tham số và chuyển chúng đến sp_executesql. Ví dụ
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
Như bạn có thể thấy, văn bản lệnh sql không làm cứng các giá trị tham số để sử dụng. Chúng được chuyển một cách riêng biệt trong thi hành sp_executesql
Nếu bạn viết sqL động cũ không tốt
set @sqlcommand = N'Select Something from Table where Field1 = ' + @Param1 + ' AND Field2 = ' + @Param2
exec sp_executesql @sqlcommand
thì SQL Server sẽ không thể lưu trữ các kế hoạch thực thi