Anweisungsparameter

Ein Parameter ist eine Variable in einer SQL-Anweisung. Angenommen, eine Parts-Tabelle enthält Spalten namens "PartID", "Beschreibung" und "Preis". Wenn Sie einen Teil ohne Parameter hinzufügen möchten, müssen Sie eine SQL-Anweisung erstellen, z. B.:

INSERT INTO Parts (PartID, Description, Price) VALUES (2100, 'Drive shaft', 50.00)  

Obwohl diese Anweisung eine neue Reihenfolge einfügt, ist sie keine gute Lösung für eine Auftragseingabeanwendung, da die einzufügenden Werte in der Anwendung nicht hartcodiert werden können. Eine Alternative besteht darin, die SQL-Anweisung zur Laufzeit mithilfe der einzufügenden Werte zu konstruieren. Dies ist auch keine gute Lösung, aufgrund der Komplexität der Erstellung von Anweisungen zur Laufzeit. Die beste Lösung besteht darin, die Elemente der VALUES-Klausel durch Fragezeichen (?) oder Parametermarkierungen zu ersetzen:

INSERT INTO Parts (PartID, Description, Price) VALUES (?, ?, ?)  

Die Parametermarkierungen werden dann an Anwendungsvariablen gebunden. Um eine neue Zeile hinzuzufügen, muss die Anwendung nur die Werte der Variablen festlegen und die Anweisung ausführen. Der Treiber ruft dann die aktuellen Werte der Variablen ab und sendet sie an die Datenquelle. Wenn die Anweisung mehrmals ausgeführt wird, kann die Anwendung den Prozess noch effizienter gestalten, indem die Anweisung vorbereitet wird.

Die soeben angezeigte Anweisung kann in einer Auftragseintragsanwendung hartcodiert sein, um eine neue Zeile einzufügen. Parametermarkierungen sind jedoch nicht auf vertikale Anwendungen beschränkt. Für jede Anwendung erleichtern sie das Erstellen von SQL-Anweisungen zur Laufzeit, indem Sie Konvertierungen in und von Text vermeiden. Die angezeigte Teil-ID wird z. B. höchstwahrscheinlich in der Anwendung als ganze Zahl gespeichert. Wenn die SQL-Anweisung ohne Parametermarkierungen erstellt wird, muss die Anwendung die Teil-ID in Text konvertieren, und die Datenquelle muss sie wieder in eine ganze Zahl konvertieren. Mithilfe einer Parametermarkierung kann die Anwendung die Teil-ID als ganze Zahl an den Treiber senden, was sie in der Regel als ganze Zahl an die Datenquelle senden kann. Dadurch werden zwei Konvertierungen gespeichert. Bei langen Datenwerten ist dies sehr wichtig, da die Textformen solcher Werte häufig die zulässige Länge einer SQL-Anweisung überschreiten.

Parameter sind nur an bestimmten Stellen in SQL-Anweisungen gültig. Beispielsweise sind sie in der Auswahlliste (die Liste der Spalten, die von einer SELECT-Anweisung zurückgegeben werden sollen) nicht zulässig, oder sie sind als beide Operanden eines binären Operators wie das Gleichheitszeichen (=) zulässig, da es unmöglich wäre, den Parametertyp zu bestimmen. Im Allgemeinen sind Parameter nur in DML-Anweisungen (Data Manipulation Language) und nicht in DDL-Anweisungen (Data Definition Language) gültig. Weitere Informationen finden Sie unter Parametermarkierungen in Anhang C: SQL Grammar.

Wenn die SQL-Anweisung eine Prozedur aufruft, können benannte Parameter verwendet werden. Benannte Parameter werden durch ihre Namen und nicht durch ihre Position in der SQL-Anweisung identifiziert. Sie können durch einen Aufruf von SQLBindParameter gebunden werden, aber der Parameter wird durch das SQL_DESC_NAME Feld der IPD (Implementierungsparameterdeskriptor) und nicht durch das ParameterNumber-Argument von SQLBindParameter identifiziert. Sie können auch durch Aufrufen von SQLSetDescField oder SQLSetDescRec gebunden werden. Weitere Informationen zu benannten Parametern finden Sie unter Binding Parameters by Name (Named Parameters) weiter unten in diesem Abschnitt. Weitere Informationen zu Deskriptoren finden Sie unter Deskriptoren.

In diesem Abschnitt werden die folgenden Themen behandelt: