Unterstützung für Spalten mit geringer Dichte (OLE DB)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

OLE DB-Treiber herunterladen

Dieser Artikel enthält Informationen über die Unterstützung des OLE DB-Treibers für SQL Server für Sparsespalten. Weitere Informationen zu Sparsespalten finden Sie unter Sparse Columns Support in OLE DB Driver for SQL Server (Unterstützung von Sparsespalten im OLE DB-Treiber für SQL Server). Ein Beispiel finden Sie unter Anzeigen von Spalten- und Katalogmetadaten für Sparsespalten (OLE DB).

OLE DB-Anweisungsmetadaten

Ab SQL Server 2008 (10.0.x) ist ein neuer DBCOLUMNFLAGS-Flagwert verfügbar, DBCOLUMNFLAGS_SS_ISCOLUMNSET. Dieser Wert sollte für Spalten festgelegt werden, die column_set -Werte sind. Das DBCOLUMNFLAGS-Flag kann über den dwFlags-Parameter von IColumnsInfo::GetColumnsInfo und die DBCOLUMN_FLAGS-Spalte des Rowsets abgerufen werden, das von IColumnsRowset::GetColumnsRowset zurückgegeben wird.

OLE DB-Katalogmetadaten

Zwei zusätzliche SQL Server-spezifische Spalten wurden zu DBSCHEMA_COLUMNS hinzugefügt.

Spaltenname Datentyp Wert/Kommentare
SS_IS_SPARSE DBTYPE_BOOL Wenn die Spalte eine Sparsespalte ist, weist sie den Wert VARIANT_TRUE auf, andernfalls den Wert VARIANT_FALSE.
SS_IS_COLUMN_SET DBTYPE_BOOL Wenn die Spalte die column_set -Sparsespalte ist, weist sie den Wert VARIANT_TRUE auf, andernfalls den Wert VARIANT_FALSE.

Zwei zusätzliche Schemarowsets wurden ebenfalls hinzugefügt. Diese Rowsets verfügen über die gleiche Struktur wie DBSCHEMA_COLUMNS, geben aber andere Inhalte zurück. DBSCHEMA_COLUMNS_EXTENDED gibt alle Spalten zurück, unabhängig davon, ob sie Elemente von column_set sind. DBSCHEMA_SPARSE_COLUMN_SET gibt nur Spalten zurück, die Elemente des Sparse-column_set sind.

OLE DB DataTypeCompatibility-Verhalten

Das Verhalten mit DataTypeCompatibility=80 (in der Verbindungszeichenfolge) entspricht dem eines SQL Server 2000 (8.x)-Clients folgendermaßen:

  • Die neuen Schemarowsets sind nicht sichtbar, und es gibt keine Zeilen für sie im Rowset der Schemarowsets.

  • Neue Spalten im COLUMNS-Rowset sind nicht sichtbar.

  • DBCOLUMNFLAGS_SS_ISCOLUMNSET wird nicht für column_set -Spalten festgelegt.

  • DBCOMPUTEMODE_NOTCOMPUTED wird für column_set -Spalten festgelegt.

OLE DB-Unterstützung für Spalten mit geringer Dichte

Die folgenden OLE DB-Schnittstellen wurden im OLE DB-Treiber für SQL Server geändert, um Sparsespalten zu unterstützen:

Typ oder Elementfunktion BESCHREIBUNG
IColumnsInfo::GetColumnsInfo Ein neuer DBCOLUMNFLAGS-Flagwert, DBCOLUMNFLAGS_SS_ISCOLUMNSET, wird für column_set -Spalten in dwFlagsfestgelegt.

DBCOLUMNFLAGS_WRITE wird für column_set -Spalten festgelegt.
IColumsRowset::GetColumnsRowset Ein neuer DBCOLUMNFLAGS-Flagwert, DBCOLUMNFLAGS_SS_ISCOLUMNSET, wird für column_set -Spalten in DBCOLUMN_FLAGS festgelegt.

DBCOLUMN_COMPUTEMODE wird für column_set -Spalten auf DBCOMPUTEMODE_DYNAMIC festgelegt.
IDBSchemaRowset::GetSchemaRowset DBSCHEMA_COLUMNS gibt zwei neue Spalten zurück: SS_IS_COLUMN_SET und SS_IS_SPARSE.

DBSCHEMA_COLUMNS gibt nur Spalten zurück, die keine Elemente eines column_setsind.

Zwei neue Schemarowsets wurden hinzugefügt: DBSCHEMA_COLUMNS_EXTENDED gibt alle Spalten zurück, unabhängig davon, ob sie eine geringe Dichte aufweisen oder Elemente von column_set sind. DBSCHEMA_SPARSE_COLUMN_SET gibt nur Spalten zurück, die Elemente eines column_setsind. Diese neuen Rowsets verfügen über die gleichen Spalten und die Einschränkungen wie DBSCHEMA_COLUMNS.
IDBSchemaRowset::GetSchemas IDBSchemaRowset::GetSchemas schließt die GUIDs für die neuen Rowsets DBSCHEMA_COLUMNS_EXTENDED und DBSCHEMA_SPARSE_COLUMN_SET in die Liste verfügbarer Schemarowsets ein.
ICommand::Execute Bei Verwendung von select * fromtable werden alle Spalten zurückgegeben, die keine Member der column_set-Sparsespalte sind. Außerdem wird eine XML-Spalte mit Werten von allen Nicht-NULL-Spalten zurückgegeben, die Member der column_set-Sparsespalte sind (falls vorhanden).
IOpenRowset::OpenRowset „IOpenRowset::OpenRowset“ gibt mithilfe einer select *-Abfrage für dieselbe Tabelle ein Rowset mit denselben Spalten wie „ICommand::Execute“ zurück.
ITableDefinition Es gibt keine Änderungen an dieser Schnittstelle für Sparsespalten oder für column_set -Spalten. Anwendungen, die Schemaänderungen vornehmen müssen, müssen den entsprechenden Transact-SQL-Code direkt ausführen.

Weitere Informationen

OLE DB-Treiber für SQL Server-Programmierung