Direkte Ausführung
Die direkte Ausführung ist die grundlegendste Art und Weise, um eine Anweisung auszuführen. Eine Anwendung bildet eine Zeichenfolge, die eine Transact-SQL-Anweisung enthält, und leitet sie mithilfe der SQLExecDirect-Funktion zur Ausführung weiter. Wenn die Anweisung beim Server eingeht, kompiliert SQL Server sie zu einem Ausführungsplan, der unmittelbar ausgeführt wird.
Die direkte Ausführung wird im Allgemeinen von Anwendungen verwendet, die Anweisungen zur Laufzeit erstellen und ausführen. Es ist zugleich die effektivste Methode, Anweisungen, die nur einmal ausgeführt werden, auszuführen. Bei vielen Datenbanken muss jedoch die SQL-Anweisung bei jeder Ausführung analysiert und kompiliert werden, sodass ein zusätzlicher Aufwand entsteht, wenn die Anweisung mehrmals ausgeführt wird.
Wenn eine Verbindung mit SQL Server-Versionen vor 7.0 besteht, sollte die direkte Ausführung verwendet werden:
Wenn eine Anweisung sehr wahrscheinlich nicht mehr als vier Mal ausgeführt werden wird.
Zum Aufrufen gespeicherter Prozeduren.
In SQL Server 2000 und späteren Versionen wurde die Leistung bei der direkten Ausführung von häufig ausgeführten Anweisungen in Mehrbenutzerumgebungen wesentlich verbessert. Durch den Einsatz von SQLExecDirect mit Parametermarkierungen für häufig ausgeführte SQL-Anweisungen wird zudem beinahe die gleiche Effizienz wie bei der vorbereiteten Ausführung erlangt.
Bei einer Verbindung mit einer Instanz von SQL Server verwendet der SQL Server Native Client ODBC-Treiber sp_executesql, um die SQL-Anweisung oder den auf SQLExecDirect angegebenen Batch zu übertragen. SQL Server verfügt über eine Logik, um mühelos zu bestimmen, ob eine SQL-Anweisung oder ein Batch, die mit sp_executesql ausgeführt wurden, der Anweisung oder dem Batch entspricht, die einen Ausführungsplan generiert haben, der bereits im Speicher vorliegt. Wenn eine Übereinstimmung gefunden wird, nutzt SQL Server den vorhandenen Plan, anstatt einen neuen Plan zu kompilieren. Das heißt, dass häufig ausgeführte SQL-Anweisungen, die mit SQLExecDirect in einem System mit vielen Benutzern ausgeführt werden, von den zahlreichen Planwiederverwertungsvorteilen profitieren können, die in vorherigen Versionen von SQL Server nur gespeicherten Prozeduren zur Verfügung standen.
Die Vorteile der erneuten Nutzung von Ausführungsplänen können jedoch nur umgesetzt werden, wenn mehrere Benutzer die gleiche SQL-Anweisungen oder den gleichen Batch ausführen. Befolgen Sie diese Kodierungskonventionen, um die Wahrscheinlichkeit zu erhöhen, dass die SQL-Anweisungen, die von unterschiedlichen Clients ausgeführt werden, sich soweit ähneln, dass die Ausführungspläne wiederverwendet werden können:
Schließen Sie keine Datenkonstanten in die SQL-Anweisungen ein, verwenden Sie stattdessen an Programmvariablen gebundene Parametermarkierungen. Weitere Informationen finden Sie unter Verwenden von Anweisungsparametern.
Verwenden Sie vollqualifizierte Objektnamen. Ausführungspläne werden nicht wiederverwendet, wenn Objektnamen nicht qualifiziert sind.
Sorgen Sie dafür, dass Anwendungsverbindungen sofern möglich einen gemeinsamen Satz an Verbindungs- und Anweisungsoptionen verwenden. Ausführungspläne, die für eine Verbindung mit einem Optionssatz (z. B. ANSI_NULLS) generiert werden, werden nicht für Verbindungen mit einem anderen Optionssatz wiederverwendet. Der SQL Server Native Client ODBC-Treiber und der SQL Server Native Client OLE DB-Anbieter haben die gleichen Standardeinstellungen für diese Optionen.
Wenn alle Anweisungen, die mit SQLExecDirect ausgeführt werden, basierend auf diesen Konventionen kodiert werden, kann SQL Server die Ausführungspläne bei Gelegenheit wiederverwenden.