Was sind die Vor- und Nachteile der realen Welt bei der Ausführung eines dynamischen SQL-Befehls in einer gespeicherten Prozedur in SQL Server?
EXEC (@SQL)
gegen
EXEC SP_EXECUTESQL @SQL
?
sql
sql-server
dynamic
Aschemaschine
quelle
quelle
In dem Artikel " Using sp_executesql" von Microsoft wird die Verwendung
sp_executesql
anstelle derexecute
Anweisung empfohlen .Also das Mitnehmen: Verwenden Sie keine
execute
Anweisung . Verwenden Siesp_executesql
.quelle
sp_executesql
nicht ersetzt werden kannexecute
. Vielleicht sollte ich den Punkt, den ich zu betonen versuche, wie folgt formulieren: Verwenden Siesp_executesql
stattexecute
wann immer möglich .Ich würde heutzutage immer sp_executesql verwenden, alles was es wirklich ist, ist ein Wrapper für EXEC, der Parameter und Variablen behandelt.
Vergessen Sie jedoch nicht OPTION RECOMPILE, wenn Sie Abfragen in sehr großen Datenbanken optimieren, insbesondere wenn Sie Daten über mehr als eine Datenbank verteilt haben und eine Einschränkung verwenden, um Index-Scans einzuschränken.
Sofern Sie OPTION RECOMPILE nicht verwenden, versucht SQL Server, einen Ausführungsplan "Einheitsgröße" für Ihre Abfrage zu erstellen, und führt bei jeder Ausführung einen vollständigen Index-Scan durch.
Dies ist viel weniger effizient als eine Suche und bedeutet, dass möglicherweise ganze Indizes gescannt werden, die auf Bereiche beschränkt sind, die Sie nicht einmal abfragen: @
quelle
Führen Sie den Befehl aus
quelle
int
in dynamischem SQL sein. Beachten Sie, dass @sql alsvarchar
odernvarchar