Parametermarkierungen (Datenbankmodul)

Parametermarkierungen werden von den ADO-, OLE DB- und ODBC-basierten Datenbank-APIs unterstützt. Eine Parametermarkierung ist ein Fragezeichen (?), das anstelle eines Eingabe- oder Ausgabeausdrucks in einer Transact-SQL-Anweisung eingefügt wird. Mithilfe von Parametermarkierungen kann eine Anwendung den Fall optimieren, in dem die gleiche Transact-SQL-Anweisung mehrmals mit unterschiedlichen Werten für die Eingabe- und Ausgabeausdrücke ausgeführt wird.

Ein Benutzer kann z. B. an eine Anwendung fünf unterschiedliche Aktiensymbole übergeben. Die Anwendung muss eine gespeicherte Prozedur aufrufen, die die aktuellen Daten für jede Aktie abruft. Die Anwendung könnte Folgendes ausführen:

  • Vorbereiten dieser Transact-SQL-Anweisung:

    EXEC GetQuoteProcedure @StockSymbolParameter = ?
    
  • Binden einer Anwendungsvariablen an die Parametermarkierung (?).

  • Ausführen einer Schleife:

    1. Verschieben des nächsten Aktiensymbols in die gebundene Variable.

    2. Ausführen der Anweisung zum Abrufen der Notierung für diese Aktie.

Parametermarkierungen sind nicht darauf beschränkt, den Parametern gespeicherter Prozeduren zugeordnet zu werden. Parametermarkierungen können an jeder Stelle verwendet werden, an der ein Eingabeausdruck verwendet wird, wie z. B.:

UPDATE HumanResources.Employees
SET Title = ?
WHERE EmployeeID = ?

Parametermarkierungen können außerdem verwendet werden, um Ausgabeparameter und Rückgabecodes von gespeicherten Prozeduren zuzuordnen. Wenn die Anwendung eine gespeicherte Prozedur ausführt, verschiebt der OLE DB-Anbieter oder der ODBC-Treiber die Datenwerte von Ausgabeparametern oder Rückgabecodes in die Variablen, die an die Markierungen des Parameters gebunden sind.

Eine Anwendung kann beispielsweise die folgende Prozedur ausführen. Diese Prozedur gibt einen ganzzahligen Rückgabecode und einen Ausgabeparameter von einem Zeichendatentyp zurück.

  1. Vorbereiten einer Anweisung:

    {? = CALL MyProc (?)}
    
  2. Binden der ersten Parametermarkierung an eine ganzzahlige Variable und der zweiten Markierung an ein Zeichenarray.

  3. Ausführen der Anweisung.

  4. Abrufen oder Abbrechen aller Resultsets, die von der gespeicherten Prozedur zurückgegeben werden.

Zu diesem Zeitpunkt haben der Microsoft OLE DB-Anbieter für SQL Server oder der SQL Server ODBC-Treiber den Rückgabecode- und den Ausgabeparameterwert bereits in die gebundenen Variablen eingefügt. Microsoft SQL Server gibt Ausgabeparameter- und Rückgabecodewerte im letzten, an den Client zurückgegebenen Paket zurück. Die Anwendung muss daher alle von der gespeicherten Prozedur zurückgegebenen Resultsets verarbeiten oder abbrechen, bevor sie Zugriff auf die Werte des Rückgabecodes und der Ausgabeparameter hat.

Die ADO-API führt eine Variante dieses Prozesses zur Ausführung von gespeicherten Prozeduren aus. Eine ADO-Anwendung führt Folgendes aus:

  1. Sie legt den Command-Objekttyp auf adCmdStoredProc fest.

  2. Sie legt den Befehlstext genau auf den Namen der Prozedur fest.

  3. Sie erstellt eine Parameters-Auflistung, indem alle Parameter und Rückgabecodes an Anwendungsvariablen gebunden werden.

  4. Sie führt das Command-Objekt aus.

Parametermarkierungen sind einem Datenbankobjekt zugeordnet, das einen bestimmten Datentyp aufweist. Falls die Anwendung eine Parametermarkierung an eine Variable bindet, deren Datentyp sich von dem des zugeordneten Datenbankobjekts unterscheidet, muss der OLE DB-Anbieter oder ODBC-Treiber die Daten konvertieren. Wenn eine Anwendung z. B. einen ganzzahligen Rückgabecode an ein Zeichenarray bindet, muss der OLE DB-Anbieter oder ODBC-Treiber die ganzzahligen Daten des Rückgabecodes in eine Zeichenfolge konvertieren. Informationen zu den unterstützten Datentypkonvertierungen finden Sie in der Dokumentation zum OLE DB-Anbieter für SQL Server und zum SQL Server-ODBC-Treiber.