На базовом уровне, как насчет блокировки любого оператора, который не начинается с SELECT? Или будут поддерживаться другие запросы, такие как операторы CTE или DECLARE? 1000 символов не слишком много места, чтобы играть, но я не очень понимаю, что это вообще.
ОБНОВЛЕНО
Хорошо, как насчет префикса, который они отправляют, с помощью SELECT TOP 500 FROM (
и добавление а). Если они попытаются сделать несколько утверждений, это выдаст ошибку, которую вы можете поймать. А чтобы предотвратить отказ в обслуживании, замените их начальный SELECT другим SELECT TOP 500.
Не помогает, если они добавили ORDER BY к чему-то, возвращающему миллион строк.