Dela via


Stöd för glesa kolumner i den interna SQL Server-klienten

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Viktig

SQL Server Native Client (SNAC) levereras inte med:

  • SQL Server 2022 (16.x) och senare versioner
  • SQL Server Management Studio 19 och senare versioner

SQL Server Native Client (SQLNCLI eller SQLNCLI11) och den äldre Microsoft OLE DB-providern för SQL Server (SQLOLEDB) rekommenderas inte för ny programutveckling.

Använd någon av följande faktorer för nya projekt:

För SQLNCLI som levereras som en komponent i SQL Server Database Engine (version 2012 till och med 2019), se det här Support Lifecycle exception.

SQL Server Native Client stöder glesa kolumner. Mer information om glesa kolumner i SQL Server finns i Använda glesa kolumner och Använda kolumnuppsättningar.

Mer information om stöd för glesa kolumner i SQL Server Native Client finns i Stöd för glesa kolumner (ODBC) och Stöd för glesa kolumner (OLE DB).

Användarscenarier för glesa kolumner och SQL Server Native Client

I följande tabell sammanfattas de vanliga användarscenarierna för SQL Server Native Client-användare med glesa kolumner:

Scenario Uppförande
välj * från tabell eller IOpenRowset::OpenRowset. Returnerar alla kolumner som inte är medlemmar i den glesa column_setplus en XML-kolumn som innehåller värdena för alla icke-null-kolumner som är medlemmar i den glesa column_set.
Referera till en kolumn efter namn. Kolumnen kan refereras oavsett dess glesa kolumnstatus eller column_set medlemskap.
Få åtkomst till column_set medlemskolumner via en beräknad XML-kolumn. Kolumner som är medlemmar i den glesa column_set kan nås genom att välja column_set efter namn och kan ha värden infogade och uppdaterade genom att uppdatera XML-koden i kolumnen column_set.

Värdet måste överensstämma med schemat för column_set kolumner.
Hämta metadata för alla kolumner i en tabell via SQLColumns med ett kolumnsökningsmönster av NULL eller "%" (ODBC); eller via DBSCHEMA_COLUMNS schemaraduppsättning utan kolumnbegränsning (OLE DB). Returnerar en rad för alla kolumner som inte är medlemmar i en column_set. Om tabellen har en gles column_setreturneras en rad för den.

Observera att detta inte returnerar metadata för kolumner som är medlemmar i en column_set.
Hämta metadata för alla kolumner, oavsett gleshet eller medlemskap i en column_set. Detta kan returnera ett mycket stort antal rader. Ange det beskrivande fältet SQL_SOPT_SS_NAME_SCOPE till SQL_SS_NAME_SCOPE_EXTENDED och anropa SQLColumns (ODBC).

Anropa IDBSchemaRowset::GetRowset för DBSCHEMA_COLUMNS_EXTENDED schemaraduppsättning (OLE DB).

Det här scenariot är inte möjligt från ett program som använder SQL Server Native Client från en tidigare version än SQL Server 2008 (10.0.x). Ett sådant program kan dock köra frågor mot systemvyer direkt.
Hämta endast metadata för kolumner som är medlemmar i en column_set. Detta kan returnera ett mycket stort antal rader. Ange det beskrivande fältet SQL_SOPT_SS_NAME_SCOPE till SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET och anropa SQLColumns (ODBC).

Anropa IDBSchemaRowset::GetRowset för DBSCHEMA_SPARSE_COLUMN_SET schemaraduppsättning (OLE DB).

Det här scenariot är inte möjligt från ett program som använder SQL Server Native Client från en tidigare version än SQL Server 2008 (10.0.x). Ett sådant program kan dock köra frågor mot systemvyer.
Avgör om en kolumn är gles. Läs kolumnen SS_IS_SPARSE i SQLColumns-resultatuppsättningen (ODBC).

Läs kolumnen SS_IS_SPARSE i DBSCHEMA_COLUMNS schemaraduppsättning (OLE DB).

Det här scenariot är inte möjligt från ett program som använder SQL Server Native Client från en tidigare version än SQL Server 2008 (10.0.x). Ett sådant program kan dock köra frågor mot systemvyer.
Kontrollera om en kolumn är en column_set. Läs kolumnen SS_IS_COLUMN_SET i SQLColumns-resultatuppsättningen. Du kan också läsa det SQL Server-specifika kolumnattributet SQL_CA_SS_IS_COLUMN_SET (ODBC).

Läs kolumnen SS_IS_COLUMN_SET i DBSCHEMA_COLUMNS schemaraduppsättningen. Du kan också läsa dwFlags som returneras av IColumnsinfo::GetColumnInfo eller DBCOLUMNFLAGS i raduppsättningen som returneras av IColumnsRowset::GetColumnsRowset. För column_set kolumner anges DBCOLUMNFLAGS_SS_ISCOLUMNSET (OLE DB).

Det här scenariot är inte möjligt från ett program som använder SQL Server Native Client från en tidigare version än SQL Server 2008 (10.0.x). Ett sådant program kan dock köra frågor mot systemvyer.
Importera och exportera glesa kolumner av BCP för en tabell utan column_set. Ingen ändring i beteendet från tidigare versioner av den interna SQL Server-klienten.
Importera och exportera glesa kolumner av BCP för en tabell med en column_set. column_set importeras och exporteras på samma sätt som XML. som varbinary(max) om det är bundet som en binär typ, eller som nvarchar(max) om det är bundet som en tecken eller wchar typ.

Kolumner som är medlemmar i den glesa column_set exporteras inte som distinkta kolumner. de exporteras endast i värdet för column_set.
queryout beteende för BCP. Ingen ändring i hanteringen av explicit namngivna kolumner från tidigare versioner av SQL Server Native Client.

Scenarier som omfattar import och export mellan tabeller med olika scheman kan kräva särskild hantering.

Mer information om BCP finns i Stöd för masskopiering (BCP) för glesa kolumner senare i det här avsnittet.

Down-Level klientbeteende

Klienter på nednivå returnerar endast metadata för kolumner som inte är medlemmar i den glesa column_set för SQLColumns och DBSCHEMA_COLUMNS. De ytterligare OLE DB-schemaraduppsättningar som introducerades i SQL Server 2008 (10.0.x) intern klient kommer inte att vara tillgängliga och inte heller kommer ändringarna av SQLColumns i ODBC via SQL_SOPT_SS_NAME_SCOPE.

Klienter på nednivå kan komma åt kolumner som är medlemmar i den glesa column_set efter namn, och kolumnen column_set kommer att vara tillgänglig som en XML-kolumn för SQL Server 2005-klienter (9.x).

Stöd för masskopiering (BCP) för glesa kolumner

Det finns inga ändringar i BCP-API:et i ODBC eller OLE DB för de glesa kolumnerna eller column_set funktioner.

Om en tabell har en column_sethanteras inte glesa kolumner som distinkta kolumner. Värdena för alla glesa kolumner ingår i värdet för column_set, som exporteras på samma sätt som en XML-kolumn. som varbinary(max) om det är bundet som en binär typ, eller som nvarchar(max) om det är bundet som en tecken eller wchar typ). Vid import måste värdet för column_set överensstämma med schemat för column_set.

För frågeutfrågning åtgärder sker ingen ändring i hur explicit refererade kolumner hanteras. column_set kolumner har samma beteende som XML-kolumner och gleshet påverkar inte hanteringen av namngivna glesa kolumner.

Men om queryout- används för export och du refererar till glesa kolumner som är medlemmar i den glesa kolumnuppsättningen efter namn, kan du inte utföra en direkt import till en liknande strukturerad tabell. Detta beror på att BCP använder metadata som är konsekventa med en väljer * åtgärd för importen och inte kan matcha column_set medlemskolumner med dessa metadata. Om du vill importera column_set medlemskolumner separat måste du definiera en vy i tabellen som refererar till önskade column_set kolumner och du måste utföra importåtgärden med hjälp av vyn.

Se även

sql server native client programming