Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server verwendet EXEC/sp_executesql oder einfach nur SQL in einer gespeicherten Prozedur?

Sehen Sie hier keinen Grund, dynamisches SQL zu verwenden. Wenn Sie tun dynamisches SQL verwenden müssen, sollten Sie sp_executesql in Betracht ziehen höher bevorzugt als EXEC() . Dafür gibt es verschiedene Gründe, darunter:

  1. sp_executesql eher Abfragepläne wiederverwendet (siehe Dynamic SQL - EXEC(@SQL) versus EXEC SP_EXECUTESQL(@SQL) );

  2. Es ist viel einfacher, stark typisierte Parameter an sp_executesql zu übergeben (SQL-Einschleusung besser vereiteln als eine Zeichenfolge verketten); und,

  3. Sie können auch Variablen aus dem dynamischen SQL-Bereich zurück in den aufrufenden Bereich bringen, zum Beispiel:

Das ist kein sehr nützliches Beispiel, aber es ist ein häufiges Problem bei der Ausführung dynamischer Zeichenfolgen. Aber was noch wichtiger ist, Sie sollten dynamisches SQL nur dann in Erwägung ziehen, wenn es sein muss, und nicht als erste Möglichkeit.