Я иногда избегаю динамического SQL, удаляя строки из временной таблицы, которые мне не нужны. Но я не говорю, что это лучше для производительности - я работаю в хранилище данных чаще, чем не там, где производительность уступает другим факторам, таким как избегание динамического SQL.
Вот пример, для отчета, который требует TOP x записей, я выбираю максимум, скажем 200, и просто удаляю остальные. (То есть 200 - это максимум, который может понадобиться отчету. Надеюсь.) Так и будет, если имя параметра равно @Range:
SELECT TOP 200
...
DELETE FROM #MyTemp where Counter > @Range