Unterstützung für Spalten mit geringer Dichte (OLE DB)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
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 | Wenn "* aus Tabelle " ausgewählt wird, werden alle Spalten zurückgegeben, die keine Elemente der spärlichen column_set sind, sowie eine XML-Spalte, die Werte aller Nicht-Null-Spalten enthält, die Elemente der geringen column_set 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. |