Freigeben über


Tabellenwertparameter-Rowseterstellung

Consumer können zwar ein beliebiges Rowsetobjekt für Tabellenwertparameter bereitstellen, typische Rowsetobjekte werden jedoch mit Back-End-Datenspeichern implementiert und bieten somit nur eine eingeschränkte Leistung. Der SQL Server Native Client OLE DB-Anbieter ermöglicht es somit Consumern, ein spezielles Rowsetobjekt auf speicherinternen Daten zu erstellen. Dieses besondere Rowsetobjekt im Arbeitsspeicher ist ein neues COM-Objekt, das als Tabellenwertparameter-Rowset bezeichnet wird. Es bietet ähnliche Funktionen wie Parametersätze.

Tabellenwertparameter-Rowsetobjekte werden explizit vom Consumer für Eingabeparameter durch mehrere Schnittstellen auf Sitzungsebene erstellt. Es steht eine Instanz des Tabellenwertparameter-Rowsetobjekts pro Tabellenwertparameter zur Verfügung. Der Consumer kann die Tabellenwertparameter-Rowsetobjekte entweder durch Bereitstellen der Metadateninformationen, die bereits bekannt sind (statisches Szenario), oder durch Ermitteln über Anbieterschnittstellen (dynamisches Szenario) erstellen. In den folgenden Abschnitten werden diese beiden Szenarien beschrieben.

Statisches Szenario

Wenn die Typinformationen bekannt sind, verwendet der Consumer ITableDefinitionWithConstraints::CreateTableWithConstraints, um ein Tabellenwertparameter-Rowsetobjekt, das einem Tabellenwertparameter entspricht, zu instanziieren.

Das guid-Feld (pTableID-Parameter) enthält die besondere GUID (CLSID_ROWSET_TVP). Das pwszName-Element enthält den Namen des Tabellenwertparameter-Typs, den der Consumer instanziieren möchte. Das eKind-Feld wird auf DBKIND_GUID_NAME gesetzt. Der Name ist erforderlich, wenn es sich um eine Ad-hoc-SQL-Anweisung handelt; bei einem Prozeduraufruf ist die Angabe des Namens optional.

Bei der Aggregation übergibt der Consumer den pUnkOuter-Parameter mit dem kontrollierenden IUnknown.

Die Eigenschaften des Tabellenwertparameter-Rowsetobjekts sind schreibgeschützt, sodass der Consumer keine Eigenschaften in rgPropertySets festlegen muss.

Für das rgPropertySets-Element jeder DBCOLUMNDESC-Struktur kann der Consumer zusätzliche Eigenschaften für jede Spalte angeben. Diese Eigenschaften gehören zum DBPROPSET_SQLSERVERCOLUMN-Eigenschaftensatz. Sie ermöglichen es Ihnen, berechnete und standardmäßige Einstellungen für jede Spalte anzugeben. Sie unterstützen auch vorhandene Spalteneigenschaften, z. B. NULL-Zulässigkeit und Identität.

Um entsprechende Informationen aus einem Tabellenwertparameter-Rowsetobjekt abzurufen, verwendet der Consumer IRowsetInfo::GetProperties.

Um Informationen zum NULL-Status, zum Aktualisierungsstatus und zum berechneten Status jeder Spalte abzurufen, verwendet der Consumer IColumnsRowset::GetColumnsRowset oder IColumnsInfo::GetColumnInfo. Diese Methoden stellen ausführliche Informationen über jede Tabellenwertparameter-Rowsetspalte bereit.

Der Consumer gibt den Typ jeder Spalte des Tabellenwertparameters an. Dies ähnelt der Angabe von Spalten, wenn in SQL Server eine Tabelle erstellt wird. Der Consumer erhält vom SQL Server Native Client OLE DB-Anbieter über den ppRowset-Ausgabeparameter ein Tabellenwertparameter-Rowsetobjekt.

Dynamisches Szenario

Wenn der Consumer keine Typinformationen hat, sollte IOpenRowset::OpenRowset zum Instanziieren von Tabellenwertparameter-Rowsetobjekten verwendet werden. Der Consumer muss dem Anbieter somit nur den Typnamen zur Verfügung stellen.

In diesem Szenario erhält der Anbieter im Namen des Consumers Typinformationen zu einem Tabellenwertparameter-Rowsetobjekt vom Server.

Der pTableID-Parameter und der pUnkOuter-Parameter sollten wie im statischen Szenario festgelegt werden. Der SQL Server Native Client OLE DB-Anbieter erhält dann die Typinformationen (Spalteninformationen und Einschränkungen) vom Server und gibt über den ppRowset-Parameter ein Tabellenwertparameter-Rowsetobjekt zurück. Für diesen Vorgang ist eine Kommunikation mit dem Server notwendig, sodass die Leistung nicht so gut ist wie beim statischen Szenario. Das dynamische Szenario funktioniert nur mit parametrisierten Prozeduraufrufen.

Siehe auch

Konzepte