In SQL Server 2008 und höher ist dies weniger der Fall, aber es ist immer noch vorhanden. Es kommt darauf an, dass der Ausführungsplan-Cache und SQL Server eingehende Abfragen automatisch parametrisieren können. Wenn gespeicherte Prozeduren verwendet werden (die kein dynamisches SQL enthalten), sind die Abfragen bereits parametrisiert, sodass SQL Server dies nicht tut. Es muss kein Plan für jede Abfrage erstellt werden, wenn diese ausgeführt wird, da die Pläne bereits im Plan-Cache gespeichert sind.
Vergessen Sie auch nicht die Sicherheitsprobleme (dynamisches SQL, Mindestberechtigungen usw.), die bei der Verwendung gespeicherter Prozeduren auftreten können.
Wenn die App dynamisches SQL für die Basistabellen verwendet, um die Daten in den Tabellen auszuwählen, einzufügen, zu aktualisieren und zu löschen, muss die Anwendung direkt über Rechte für alle diese Objekte verfügen. Wenn also jemand SQL Injection verwendet, um auf den Server zu gelangen, hat er das Recht, alle Daten in diesen Tabellen abzufragen, zu ändern oder zu löschen.
Wenn Sie gespeicherte Prozeduren verwenden, haben diese nur die Berechtigung, die gespeicherten Prozeduren auszuführen und nur die Informationen abzurufen, die die gespeicherte Prozedur zurückgeben würde. Anstatt eine schnelle Löschanweisung zu erstellen und alles wegzublasen, müssten sie herausfinden, welche Prozeduren zum Löschen von Daten verwendet werden können, und dann herausfinden, wie die Prozedur dazu verwendet wird.
Angesichts der Tatsache, dass SQL Injection der einfachste Weg ist, in eine Datenbank einzudringen, ist dies ziemlich wichtig.