Freigeben über


SQLDescribeParam

Zur Beschreibung der Parameter einer SQL-Anweisung erstellt der SQL Server Native Client ODBC-Treiber eine Transact-SQL SELECT-Anweisung und führt diese aus, wenn SQLDescribeParam für ein vorbereitetes ODBC-Anweisungshandle aufgerufen wird. Die Metadaten des Resultsets bestimmen die Eigenschaften der Parameter in der vorbereiteten Anweisung. SQLDescribeParam kann jeden Fehlercode zurückgeben, der von SQLExecute oder SQLExecDirect zurückgegeben werden kann.

Verbesserungen am Datenbankmodul ab SQL Server 2012 ermöglichen das Abrufen genauerer Beschreibungen der erwarteten Ergebnisse durch SQLDescribeParam. Diese genaueren Ergebnisse unterscheiden sich möglicherweise von den Werten, die in früheren Versionen von SQL Server von SQLDescribeParam zurückgegeben wurden. Weitere Informationen finden Sie unter Metadatenermittlung.

Eine weitere neue Funktion in SQL Server 2012 besteht darin, dass ParameterSizePtr jetzt einen Wert zurückgibt, der mit der Definition für die Größe (in Zeichen) der Spalte oder des Ausdrucks der entsprechenden Parametermarkierung übereinstimmt, wie in der ODBC-Spezifikation definiert. In früheren Versionen von SQL Server Native Client konnte ParameterSizePtr der entsprechende Wert von SQL_DESC_OCTET_LENGTH für den Typ oder ein irrelevanter Spaltengrößenwert sein, der für SQLBindParameter für einen Typ angegeben wurde, dessen Wert ignoriert werden sollte (beispielsweise SQL_INTEGER).

Der Treiber unterstützt das Aufrufen von SQLDescribeParam in folgenden Situationen nicht:

  • Nach SQLExecDirect für eine Transact-SQL-UPDATE- oder DELETE-Anweisung, die die FROM-Klausel enthält.

  • Für eine ODBC- oder Transact-SQL-Anweisung, die einen Parameter in einer HAVING-Klausel enthält oder die mit dem Ergebnis einer SUM-Funktion verglichen wird.

  • Für eine ODBC- oder Transact-SQL-Anweisung abhängig von einer Unterabfrage, die Parameter enthält.

  • Für ODBC SQL-Anweisungen, die Parametermarkierungen in beiden Ausdrücken eines Vergleichs oder quantifizierten Prädikats enthalten.

  • Für Abfragen, bei denen einer der Parameter ein Parameter für eine Funktion ist.

  • Wenn im Transact-SQL-Befehl Kommentare (/* */) vorhanden sind.

Bei der Verarbeitung von Batches von Transact-SQL-Anweisungen unterstützt der Treiber überdies keine Aufrufe von SQLDescribeParam für Parametermarkierungen in Anweisungen, die der ersten Anweisung im Batch folgen.

Bei der Beschreibung der Parameter vorbereiteter gespeicherter Prozeduren verwendet SQLDescribeParam die gespeicherte Systemprozedur sp_sproc_columns, um Parametereigenschaften abzurufen. sp_sproc_columns kann Daten für gespeicherte Prozeduren innerhalb der aktuellen Benutzerdatenbank zurückgeben. Durch Vorbereiten eines vollqualifizierten Namens für die gespeicherte Prozedur kann SQLDescribeParam über Datenbanken hinweg ausgeführt werden. Die gespeicherte Systemprozedur sp_who kann in jeder Datenbank wie folgt vorbereitet und ausgeführt werden:

SQLPrepare(hstmt, "{call sp_who(?)}", SQL_NTS);

Durch Ausführen von SQLDescribeParam nach erfolgreicher Vorbereitung wird ein leeres Rowset zurückgegeben, wenn eine Verbindung zu einer Datenbank mit Ausnahme der master-Datenbank besteht. Der gleiche Aufruf bewirkt, dass SQLDescribeParam unabhängig von der aktuellen Benutzerdatenbank erfolgreich ist. Der Aufruf muss dazu wie folgt vorbereitet sein:

SQLPrepare(hstmt, "{call master..sp_who(?)}", SQL_NTS);

Für Datentypen mit umfangreichen Werten ist der in DataTypePtr zurückgegebene Wert SQL_VARCHAR, SQL_VARBINARY oder SQL_NVARCHAR. Um anzugeben, dass die Größe des Datentypparameters für umfangreiche Werte "unbegrenzt" ist, legt der SQL Server Native Client ODBC-Treiber ParameterSizePtr auf 0 fest. Tatsächliche Größenwerte werden für varchar-Standardparameter zurückgegeben.

HinweisHinweis

Wenn der Parameter bereits mit einer Maximalgröße für den SQL_VARCHAR-, SQL_VARBINARY- oder SQL_WVARCHAR-Parameter gebunden wurde, wird die gebundene Größe des Parameters und nicht "unbegrenzt" zurückgegeben.

Um einen Eingabeparameter mit "unbegrenzter" Größe zu binden, muss Data-at-Execution verwendet werden. Es ist nicht möglich, einen Ausgabeparameter mit "unbegrenzter" Größe zu binden (es gibt keine Möglichkeit für das Streaming von Daten von einem Ausgabeparameter, wie SQLGetData es beispielsweise für Resultsets ermöglicht).

Für Ausgabeparameter muss ein Puffer gebunden werden und wenn der Wert zu umfangreich ist, wird der Puffer aufgefüllt und eine SQL_SUCCESS_WITH_INFO-Meldung wird zusammen mit einer Warnung "Zeichenfolgendaten werden rechts abgeschnitten" zurückgegeben. Die abgeschnittenen Daten werden anschließend verworfen.

SQLDescribeParam und Tabellenwertparameter

Eine Anwendung kann Informationen über Tabellenwertparameter für eine vorbereitete Anweisung mit SQLDescribeParam abrufen. Weitere Informationen finden Sie unter Tabellenwertparameter-Metadaten für vorbereitete Anweisungen.

Weitere Informationen zu Tabellenwertparametern im Allgemeinen finden Sie unter Tabellenwertparameter (ODBC).

SQLDescribeParam-Unterstützung für erweiterte Funktionen für Datum und Uhrzeit

Die für Datums-/Uhrzeittypen zurückgegebenen Werte lauten wie folgt:

DataTypePtr

ParameterSizePtr

DecimalDigitsPtr

datetime

SQL_TYPE_TIMESTAMP

23

3

smalldatetime

SQL_TYPE_TIMESTAMP

16

0

date

SQL_TYPE_DATE

10

0

time

SQL_SS_TIME2

8, 10..16

0..7

datetime2

SQL_TYPE_TIMESTAMP

19, 21..27

0..7

datetimeoffset

SQL_SS_TIMESTAMPOFFSET

26, 28..34

0..7

Weitere Informationen finden Sie unter Datums-/Uhrzeitverbesserungen (ODBC).

SQLDescribeParam-Unterstützung für große CLR-UDTs

SQLDescribeParam unterstützt große benutzerdefinierte CLR-Typen (UDTs). Weitere Informationen finden Sie unter Große benutzerdefinierte CLR-Typen (ODBC).

Siehe auch

Konzepte

ODBC-API-Implementierungsdetails

Andere Ressourcen

SQLDescribeParam-Funktion