Unterstützung für geringe Spalten in SQL Server Native Client (OLE DB)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics 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 OLE DB-Unterstützung von SQL Server Native Client für sparse Spalten. 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 sparse Spalten 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. |