Stöd för sparsamma kolumner i SQL Server Native Client (OLE DB)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Important

Den interna SQL Server-klienten (ofta förkortad SNAC) har tagits bort från SQL Server 2022 (16.x) och SQL Server Management Studio 19 (SSMS). Både SQL Server Native Client OLE DB-providern (SQLNCLI eller SQLNCLI11) och den äldre Microsoft OLE DB-providern för SQL Server (SQLOLEDB) rekommenderas inte för ny utveckling. Växla till den nya Microsoft OLE DB Driver (MSOLEDBSQL) för SQL Server framöver.

Detta ämne ger information om SQL Server Native Client OLE DB-stöd för glesa kolumner. För mer information om glesa kolumner, se Sparse Columns Support in SQL Server Native Client. För ett exempel, se Displaykolumn och katalogmetadata för sparsamma kolumner (OLE DB).

OLE DB-satsmetadata

Från och med SQL Server 2008 (10.0.x) finns ett nytt DBCOLUMNFLAGS-flaggvärde, DBCOLUMNFLAGS_SS_ISCOLUMNSET, tillgängligt. Detta värde bör sättas för kolumner som är column_set värden. DBcolumnflags-flaggan kan hämtas via dwFlags-parametern i IColumnsInfo::GetColumnsInfo och den DBCOLUMN_FLAGS kolumnen i raduppsättningen som returneras av IColumnsRowset::GetColumnsRowset.

OLE DB-katalogmetadata

Två ytterligare SQL Server-specifika kolumner har lagts till DBSCHEMA_COLUMNS.

Kolumnnamn Datatyp Värde/kommentarer
SS_IS_SPARSE DBTYPE_BOOL Om kolumnen är en gles kolumn har detta värdet VARIANT_TRUE; annars VARIANT_FALSE.
SS_IS_COLUMN_SET DBTYPE_BOOL Om kolumnen är den glesa column_set kolumnen har denna värde VARIANT_TRUE; annars VARIANT_FALSE.

Två ytterligare schema-raduppsättningar har också lagts till. Dessa raduppsättningar har samma struktur som DBSCHEMA_COLUMNS men returnerar olika innehåll. DBSCHEMA_COLUMNS_EXTENDED returnerar alla kolumner oavsett column_set medlemskap. DBSCHEMA_SPARSE_COLUMN_SET returnerar endast kolumner som är medlemmar i den glesa column_set.

OLE DB DataTypeCompatibility beteende

Beteendet med DataTypeCompatibility=80 (i anslutningssträngen) är förenligt med en SQL Server 2000 (8.x)-klient, enligt följande:

  • De nya schema-radmängderna är inte synliga, och det finns inga rader för dem i schema-raduppsättningens raduppsättning.

  • Nya kolumner i COLUMNS-raduppsättningen är inte synliga.

  • DBCOLUMNFLAGS_SS_ISCOLUMNSET är inte inställd för column_set kolumner.

  • DBCOMPUTEMODE_NOTCOMPUTED är inställt på column_set kolumner.

OLE DB-stöd för glesa kolumner

Följande OLE DB-gränssnitt modifierades i SQL Server Native Client för att stödja glesa kolumner:

Typ- eller medlemsfunktion Description
IColumnsInfo::GetColumnsInfo Ett nytt DBCOLUMNFLAGS-flaggvärde DBCOLUMNFLAGS_SS_ISCOLUMNSET sätts för column_set kolumner i dwFlags.

DBCOLUMNFLAGS_WRITE är inställd på column_set kolumner.
IColumnsRowset::GetColumnsRowset Ett nytt DBCOLUMNFLAGS-flaggvärde, DBCOLUMNFLAGS_SS_ISCOLUMNSET, sätts för column_set kolumner i DBCOLUMN_FLAGS.

DBCOLUMN_COMPUTEMODE är inställd på DBCOMPUTEMODE_DYNAMIC för column_set kolumner.
IDBSchemaRowset::GetSchemaRowset DBSCHEMA_COLUMNS returnerar två nya kolumner: SS_IS_COLUMN_SET och SS_IS_SPARSE.

DBSCHEMA_COLUMNS returnerar endast kolumner som inte är medlemmar i en column_set.

Två nya schema-raduppsättningar har lagts till: DBSCHEMA_COLUMNS_EXTENDED returnerar alla kolumner oavsett hur gles column_set medlemskap är. DBSCHEMA_SPARSE_COLUMN_SET returnerar endast kolumner som är medlemmar i en column_set. Dessa nya raduppsättningar har samma kolumner och begränsningar som DBSCHEMA_COLUMNS.
IDBSchemaRowset::GetSchemas IDBSchemaRowset::GetSchemas inkluderar GUID:erna för de nya raduppsättningarna DBSCHEMA_COLUMNS_EXTENDED och DBSCHEMA_SPARSE_COLUMN_SET i listan över tillgängliga schema-radmängder.
ICommand::Utför Om välj * fråntabellen används returneras alla kolumner som inte är medlemmar i den gles column_set, plus en XML-kolumn som innehåller värden för alla icke-nullkolumner som är medlemmar i den glesa column_set, om de finns.
IOpenRowset::OpenRowset IOpenRowset::OpenRowset returnerar en raduppsättning med samma kolumner som ICommand::Execute, med en select* -fråga i samma tabell.
ITableDefinition Det finns ingen förändring i detta gränssnitt för glesa kolumner eller för column_set kolumner. Applikationer som måste göra schemaändringar måste utföra rätt Transact-SQL direkt.