Нет, и я бы сказал, что основным преимуществом хранимых процедур больше не является то, что они «предварительно скомпилированы» (с 2005 года или ранее, возможно, никогда, за исключением вызовов с очень большим объемом).
Существует кэш плана, который также доступен для специальных операторов.
В этом конкретном примере вновь появилась уязвимость к внедрению, которая будет автоматически:
CREATE PROCEDURE MyProc
(@FirstName varchar(50),
@LastName varchar(50))
AS
BEGIN
SELECT * FROM TABLENAME
WHERE FirstName = @FirstName
AND LastName = @LastName
END
Все радипараметризации по имени таблицы.
Преимущества хранимых процедур включают:
Управление безопасностью (возможность управления правами EXEC независимо от SELECT / INSERT / UPDATE)
Координация доступа (обеспечение выполнения всех операций определенными способами)
Организация (возможность организации интерфейса с базой данных согласованным образом)
Предотвращение инъекций (хранимые процедуры всегда параметризованы, это гарантирует, что вызывающие абоненты не могут создавать случаи базы данных, которые являютсяНельзя внедрять - обратите внимание, что сами SP должны быть написаны правильно, но программисты-клиенты не смогут вводить инъекции, если они имеют доступ только к SP, а не к таблицам)
Инвентаризация системы(возможность профилировать и оптимизировать определенные процедуры по именам, иметь всесторонний и хорошо документированный интерфейсный слой, состоящий из хранимых процедур)
Динамический SQL в SP имеет свое местои это может отрицать некоторые вещи - например, безопасность (она запускает новую цепочку, поэтому здесь необходимо предоставить разрешения SELECT) и внедрение.Кэширование плана выполнения - это не то, что я бы высоко оценил в списке.