SQLPrepare

Der SQL Server Native Client ODBC-Treiber erstellt eine temporär gespeicherte Prozedur aus vorbereiteten SQL-Anweisungen. Gespeicherte Prozeduren sind gut geeignet, um eine Anweisung mehrmals auszuführen; allerdings ist das Erstellen von gespeicherten Prozeduren kostenaufwändiger als das Ausführen einer einfachen Anweisung. Ziehen Sie SQLPrepare und SQLExecute immer dann in Betracht, wenn die Anwendung eine SQL-Anweisung mehr als dreimal senden wird.

Hinweis

SQL Server unterstützt das Vorbereitungs-/Ausführungsmodell von ODBC. Die Besprechung des SQLPrepare-/SQLExecute-Verhaltens gilt nur für SQL Server-Versionen vor 7.0.

Eine temporär gespeicherte Prozedur, die mit SQLPrepare erstellt wurde, erhält den Namen **#odbc#**useridentifier, wobei useridentifier sich aus maximal sechs Zeichen des Benutzernamens und maximal acht Zahlen, die die Prozedur identifizieren, zusammensetzt.

SQLPrepare erstellt die temporär gespeicherte Prozedur, wenn alle Parameterwerte gebunden sind oder wenn die SQL-Anweisung keine Parameter enthält. SQLExecute erstellt die Prozedur, wenn beim Aufruf von SQLPrepare nicht alle Parameter gebunden waren.

SQLPrepare kann gespeicherte Prozeduren effektiver als SQLExecute erstellen. Zum Binden von Parametervariablen vor dem Aufrufen von SQLPrepare wird der Einsatz von SQLBindParameter empfohlen.

Wenn die Anweisung CREATE PROCEDURE zum Erstellen einer temporär gespeicherten Prozedur einen Fehler zurückgibt, sendet SQLPrepare oder SQLExecute die Anweisung an SQL Server, wobei (je nach Anweisungstyp) die Option SET NOEXEC oder SET PARSEONLY aktiviert ist. SQL Server überprüft die Syntax der Anweisung und gibt Fehler zurück.

SQLExecute kann ODBC SQLSTATE und einen beliebigen SQL Server-Fehler zurückgeben, die wiederum von SQLPrepare zurückgegeben werden können.

Der SQL Server Native Client ODBC-Treiber erstellt eine neue temporär gespeicherte Prozedur, wenn die Werte InputOutputType, ParameterType, ColumnSize oder DecimalDigits beim Aufruf von SQLBindParameter bei einer vorbereiteten Anweisung geändert werden. Eine neue temporär gespeicherte Prozedur wird nicht erstellt, wenn gebundene Parameter auf neue Puffer im Clientspeicher verweisen, die Länge des Clientspeichers oder der Verweis auf die Länge bzw. der Indikatorwert für den Parameter geändert wird.

Wenn eine Verbindung keine gespeicherte Prozedur erstellen kann (z. B. aufgrund fehlender Berechtigungen), verwendet der SQL Server Native Client ODBC-Treiber keine gespeicherte Prozedur, sondern sendet vielmehr die SQL-Anweisung bei jedem Aufruf von SQLExecute.

Standardmäßig löscht der SQL Server Native Client ODBC-Treiber temporär gespeicherte Prozeduren, wenn die Verbindung unterbrochen wird (SQLDisconnect wird für die Verbindung aufgerufen). Dies bereitet möglicherweise Probleme, wenn die Verbindung unbegrenzt erhalten bleiben soll. Das Standardverhalten kann mit der treiberspezifischen Verbindungsoption SQL_USE_PROCEDURE_FOR_PREPARE geändert werden.

Hinweis

Wenn SET NOCOUNT ON nicht ausgeführt wurde, erstellen mehrere Anweisungen, die in eine gespeicherte Prozedur eingebettet sind, nicht wie erwartet mehrere Ergebnissätze. Von SQL-Anweisungen in einer gespeicherten Prozedur erstellte Zeilenanzahl wird vom Treiber nicht berücksichtigt.

Siehe auch

Konzepte

ODBC-API-Implementierungsdetails

Andere Ressourcen

SQLPrepare-Funktion