Unterstützung von Sparsespalten in SQL Server Native Client (OLE DB)

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

Wichtig

Der SQL Server Native Client (häufig abgekürzt mit SNAC) wurde aus SQL Server 2022 (16.x) und SQL Server Management Studio 19 (SSMS) entfernt. Sowohl der OLE DB-Anbieter für den SQL Server Native Client (SQLNCLI oder SQLNCLI11) als auch der Microsoft OLE DB-Legacyanbieter für SQL Server (SQLOLEDB) werden für Neuentwicklungen nicht empfohlen. Verwenden Sie in Zukunft den neuen Microsoft OLE DB-Treiber für SQL Server (MSOLEDBSQL).

Dieses Thema enthält Informationen zur SQL Server Native Client OLE DB-Unterstützung für Sparsespalten. Weitere Informationen zu Sparsespalten finden Sie unter Sparse Columns Support in SQL Server Native Client. 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 in SQL Server Native Client 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

SQL Server Native Client (OLE DB)