Tak jest mniej w SQL Server 2008 i nowszych wersjach, ale nadal tam jest. Sprowadza się to do pamięci podręcznej planu wykonania i możliwości automatycznego parametryzowania zapytań wysyłanych przez SQL Server. Podczas korzystania z procedur przechowywanych (które nie zawierają dynamicznego SQL) zapytania są już parametryzowane, więc SQL Server nie „ trzeba wygenerować plan dla każdego zapytania, gdy jest ono uruchomione, ponieważ plany są już przechowywane w pamięci podręcznej planu.
I nie zapomnij o problemach bezpieczeństwa (dynamiczny SQL, minimalne uprawnienia itp.), Które znikają podczas korzystania z procedur przechowywanych.
Gdy aplikacja korzysta z dynamicznego SQL w stosunku do tabel podstawowych do wybierania, wstawiania, aktualizowania i usuwania danych w tabelach, aplikacja musi mieć prawa do wszystkich tych obiektów bezpośrednio. Więc jeśli ktoś używa SQL Injection, aby dostać się na serwer, będzie miał prawo do zapytania, zmiany lub usunięcia wszystkich danych w tych tabelach.
Jeśli korzystasz z procedur przechowywanych, mają one jedynie prawo do wykonania procedur przechowywanych, zwracając tylko informacje, które procedura zwrócona zwróci. Zamiast wydać szybką instrukcję usuwania i wysadzić wszystko w powietrze, musieliby dowiedzieć się, jakie procedury można zastosować do usunięcia danych, a następnie dowiedzieć się, jak skorzystać z tej procedury.
Biorąc pod uwagę, że SQL Injection jest najłatwiejszym sposobem włamania się do bazy danych, jest to dość ważne.