Я бы всегда использовал sp_executesql в наши дни, все что на самом деле это обертка для EXEC, которая обрабатывает параметры и переменные.
Однако не забывайте об OPTION RECOMPILE при настройке запросов к очень большим базам данных, особенно если ваши данные охватывают более одной базы данных и используете CONSTRAINT для ограничения сканирования индекса.
Если вы не используете OPTION RECOMPILE, сервер SQL будет пытаться создать план выполнения «один размер для всех» для вашего запроса и будет запускать полное сканирование индекса при каждом его запуске.
Это гораздо менее эффективно, чем поиск, и означает, что он потенциально сканирует целые индексы, ограниченные диапазонами, которые вы даже не запрашиваете: @