Это меньше, чем в SQL Server 2008 и выше, но он все еще там. Это сводится к тому, что кэш плана выполнения и SQL Server могут автоматически параметризировать запросы, которые отправляются. При использовании хранимых процедур (в которых отсутствует динамический SQL) запросы уже параметризованы, поэтому SQL Server не ' При каждом выполнении запроса необходимо сгенерировать план, поскольку планы уже хранятся в кэше планов.
И не забывайте о проблемах безопасности (динамический SQL, минимальные разрешения и т. Д.), Которые исчезают при использовании хранимых процедур.
Когда приложение использует динамический SQL по отношению к базовым таблицам для выбора, вставки, обновления и удаления данных в таблицах, приложение должно иметь права на все эти объекты напрямую. Поэтому, если кто-то использует SQL-инъекцию для входа на сервер, у него будут права запрашивать, изменять или удалять все данные в этих таблицах.
Если вы используете хранимые процедуры, они имеют только права на выполнение хранимых процедур, получая только ту информацию, которую хранимая процедура вернет. Вместо того чтобы выдавать оператор быстрого удаления и уничтожать все, им нужно будет выяснить, какие процедуры можно использовать для удаления данных, а затем выяснить, как использовать процедуру для этого.
Учитывая, что SQL-инъекция является самым простым способом проникновения в базу данных, это очень важно.