Freigeben über


Deskriptorfelder für Tabellenwertparameter

Die Unterstützung für Tabellenwertparameter bietet neue, SQL Server-spezifische Felder in ODBC-Anwendungsparameterdeskriptoren (Application Parameter Descriptor, APD) und Implementierungsparameterdeskriptoren (Implementation Parameter Descriptor, IPD).

Hinweise

Name

Pfad

Typ

Beschreibung

SQL_CA_SS_TYPE_NAME

IPD

SQLTCHAR*

Der Servertypname des Tabellenwertparameters.

Wenn bei einem Aufruf von SQLBindParameter der Name des Tabellenwertparametertyps angegeben wird, muss dieser immer als Unicode-Wert angegeben werden, auch bei Anwendungen, die als ANSI-Anwendungen erstellt wurden. Der für den Parameter StrLen_or_IndPtr verwendete Wert sollte entweder SQL_NTS oder die Länge der Zeichenfolge multipliziert mit sizeof(WCHAR) sein.

Für einen über SQLSetDescField angegebenen Namen eines Tabellenwertparametertyps kann ein mit der Art der Anwendung kompatibles Literal verwendet werden. Der ODBC-Treiber-Manager führt die eventuell erforderliche Unicode-Konvertierung aus.

SQL_CA_SS_TYPE_CATALOG_NAME (schreibgeschützt)

IPD

SQLTCHAR*

Der Katalog, in dem der Typ definiert ist.

SQL_CA_SS_TYPE_SCHEMA_NAME

IPD

SQLTCHAR*

Das Schema, in dem der Typ definiert ist.

Anwendungen dürfen für Tabellenwertparameter SQL_CA_SS_TYPE_CATALOG_NAME nicht festlegen. Andernfalls werden ein SQL_ERROR und ein Diagnosedatensatz mit SQLSTATE = HY091 und der Meldung "Ungültiger Deskriptorfeldbezeichner" zurückgegeben.

Die folgenden Anweisungsattribute und Deskriptorheaderfelder gelten für Tabellenwertparameter, wenn der Parameterfokus auf einen Tabellenwertparameter festgelegt ist:

Name

Pfad

Typ

Beschreibung

SQL_ATTR_PARAMSET_SIZE

(Dies entspricht SQL_DESC_ARRAY_SIZE im APD.)

APD

SQLUINTEGER

Die Arraygröße der Pufferarrays für einen Tabellenwertparameter. Dies entspricht der maximalen Anzahl an Zeilen, die die Puffer enthalten können, oder der Größe der Puffer in Zeilen ausgedrückt. Der Wert des Tabellenwertparameters selbst kann darüber- oder darunterliegen. Der Standardwert ist 1.

HinweisHinweis
Wenn SQL_SOPT_SS_PARAM_FOCUS auf den Standardwert 0 festgelegt ist, verweist SQL_ATTR_PARAMSET_SIZE auf die Anweisung und gibt die Anzahl der Parametersätze an. Wenn SQL_SOPT_SS_PARAM_FOCUS auf die Ordnungszahl eines Tabellenwertparameters festgelegt ist, verweist das Attribut auf den Tabellenwertparameter und gibt die Anzahl der Zeilen pro Parameterset des Tabellenwertparameters an.

SQL_ATTR_PARAM _BIND_TYPE

APD

SQLINTEGER

Der Standard ist SQL_PARAM_BIND_BY_COLUMN.

Zum Auswählen der zeilenbezogenen Bindung wird dieses Feld auf die Länge der Struktur oder die Instanz eines Puffers festgelegt, der an einen Satz von Tabellenwert-Parameterzeilen gebunden wird. Die Längenangabe muss Platz für alle gebundenen Spalten und möglicherweise vorhandene Auffüllzeichen der Struktur bzw. des Puffers vorsehen. Auf diese Weise wird sichergestellt, dass bei einer um eine angegebene Länge inkrementierten Adresse einer gebundenen Spalte das Ergebnis auf den Anfang derselben Spalte in der nächsten Zeile zeigt. Wenn Sie den sizeof-Operator in ANSI C verwenden, wird dieses Verhalten garantiert.

SQL_ATTR_PARAM_BIND_OFFSET_PTR

APD

SQLINTEGER*

Der Standardwert ist ein NULL-Zeiger.

Wenn dieses Feld nicht NULL ist, hebt der Treiber den Verweis auf den Zeiger auf, fügt den verweislosen Wert jedem der zurückgestellten Felder im Deskriptordatensatz (SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR und SQL_DESC_OCTET_LENGTH_PTR) hinzu und verwendet die neuen Zeigerwerte, um auf die Datenwerte zuzugreifen.

Diese Felder sind nur mit Tabellenwertparametern gültig und werden für andere Datentypen ignoriert.

SQL_CA_SS_TYPE_NAME ist für Aufrufe von gespeicherten Prozeduren optional. SQL_CA_SS_TYPE_NAME muss für SQL-Anweisungen angegeben werden, die keine Prozeduraufrufe sind, damit der Server den Typ des Tabellenwertparameters ermitteln kann.

Wenn der Name des Typs erforderlich ist und der Tabellentyp des Tabellenwertparameters in einem anderen Schema definiert ist als die gespeicherte Prozedur, muss SQL_CA_SS_TYPE_SCHEMA_NAME im Implementierungsparameterdeskriptor (Implementation Parameter Descriptor, IPD) angegeben werden. Andernfalls ist der Server nicht in der Lage, den Typ des Tabellenwertparameters zu ermitteln. Dies führt zu einem Fehler, wenn Sie SQLExecute oder SQLExecDirect aufrufen. Der Fehler ist SQLSTATE = 07006 und enthält die Meldung "Attributverletzung beschränkter Datentypen".

Tabellenwert-Parameterspalten können entweder zeilenweise oder spaltenweise Bindungen verwenden. Der Standard ist die spaltenweise Bindung. Die Zeilenweise Bindung kann angegeben werden, indem SQL_ATTR_PARAM_BIND_TYPE und SQL_ATTR_ PARAM_BIND_OFFSET_PTR festgelegt werden. Dies entspricht der zeilenweisen Bindung von Spalten und Parametern.

SQL_CA_SS_TYPE_CATALOG_NAME und SQL_CA_SS_TYPE_SCHEMA_NAME können auch verwendet werden, um den Katalog und das Schema abzurufen, die mit Parametern vom CLR-benutzerdefinierten Typ verbunden sind. Dabei handelt es sich um Alternativen zu den vorhandenen typspezifischen Katalogschemaattributen für diese Typen.

Siehe auch

Konzepte