Share via


Supporto per colonne di tipo sparse in SQL Server Native Client

Si applica a:SQL ServerDatabase SQL diAzure Istanzagestita di SQL di Azure Azure Synapse Analytics PlatformSystem (PDW)

Importante

SQL Server Native Client (spesso abbreviato SNAC) è stato rimosso da SQL Server 2022 (16.x) e SQL Server Management Studio 19 (SSMS). SQL Server Native Client (SQLNCLI o SQLNCLI11) e il provider Microsoft OLE DB legacy per SQL Server (SQLOLEDB) non sono consigliati per lo sviluppo di nuove applicazioni. Passare al nuovo Microsoft OLE DB Driver (MSOLEDBSQL) per SQL Server o alla versione più recente di Microsoft ODBC Driver per SQL Server . Per SQLNCLI fornito come componente del motore di database di SQL Server (versioni da 2012 a 2019), vedere questa eccezione relativa al ciclo di vita del supporto.

SQL Server Native Client supporta colonne di tipo sparse. Per altre informazioni sulle colonne di tipo sparse in SQL Server, vedere Usare le colonne di tipo sparse e Usare set di colonne.

Per altre informazioni sul supporto delle colonne di tipo sparse in SQL Server Native Client, vedere Supporto colonne di tipo sparse (ODBC) e Supporto colonne di tipo sparse (OLE DB).For more information about sparse column support in SQL Server Native Client, see Sparse Columns Support (ODBC) and Sparse Columns Support (OLE DB).

Scenari utente per colonne di tipo sparse e SQL Server Native Client

La tabella seguente riepiloga gli scenari utente comuni per gli utenti di SQL Server Native Client con colonne di tipo sparse:

Scenario Comportamento
select * from table o IOpenRowset::OpenRowset. Restituisce tutte le colonne che non sono membri del set di colonne column_set di tipo sparse, nonché una colonna XML che contiene i valori di tutte le colonne non Null che sono membri del set di colonne column_set di tipo sparse.
Fare riferimento a una colonna in base al nome. È possibile fare riferimento alla colonna indipendentemente dal relativo stato di colonna di tipo sparse o dall'appartenenza al set di colonne column_set.
Accedere alle colonne che sono membri del set di colonne column_set tramite una colonna XML calcolata. È possibile accedere alle colonne che sono membri del set di colonne column_set di tipo sparse selezionando il set di colonne column_set in base al nome; inoltre, i valori di tali colonne possono essere inseriti e aggiornati aggiornando i dati XML nella colonna column_set.

Il valore deve essere conforme allo schema per le colonne column_set.
Recuperare i metadati per tutte le colonne di una tabella tramite SQLColumns con un criterio di ricerca di colonne NULL o '%' (ODBC); o tramite il set di righe dello schema DBSCHEMA_COLUMNS senza alcuna restrizione di colonna (OLE DB). Restituisce una riga per tutte le colonne che non sono membri di un set di colonne column_set. Se la tabella include un set di colonne column_set di tipo sparse, verrà restituita una riga per la tabella.

Si noti che questo comportamento non restituisce metadati per colonne membri di un set di colonne column_set.
Recuperare metadati per tutte le colonne, indipendentemente dal fatto che siano o meno di tipo sparse o dall'appartenenza a un set di colonne column_set. È possibile che venga restituito un numero molto elevato di righe. Impostare il campo descrittore SQL_SOPT_SS_NAME_SCOPE su SQL_SS_NAME_SCOPE_EXTENDED e chiamare SQLColumns (ODBC).

Chiamare IDBSchemaRowset::GetRowset per il set di righe dello schema DBSCHEMA_COLUMNS_EXTENDED (OLE DB).

Questo scenario non è possibile da un'applicazione che usa SQL Server Native Client da una versione precedente a SQL Server 2008 (10.0.x). Tuttavia, tale applicazione potrebbe eseguire query direttamente sulle viste di sistema.
Recuperare metadati solo per le colonne che sono membri di un set di colonne column_set. È possibile che venga restituito un numero molto elevato di righe. Impostare il campo descrittore SQL_SOPT_SS_NAME_SCOPE su SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET e chiamare SQLColumns (ODBC).

Chiamare IDBSchemaRowset::GetRowset per il set di righe dello schema DBSCHEMA_SPARSE_COLUMN_SET (OLE DB).

Questo scenario non è possibile da un'applicazione che usa SQL Server Native Client da una versione precedente a SQL Server 2008 (10.0.x). Tale applicazione, tuttavia, può eseguire query sulle viste di sistema.
Determinare se una colonna è di tipo sparse. Consultare la colonna SS_IS_SPARSE del set di risultati SQLColumns (ODBC).

Esaminare la colonna SS_IS_SPARSE del set di righe dello schema DBSCHEMA_COLUMNS (OLE DB).

Questo scenario non è possibile da un'applicazione che usa SQL Server Native Client da una versione precedente a SQL Server 2008 (10.0.x). Tale applicazione, tuttavia, può eseguire query sulle viste di sistema.
Determinare se una colonna è un column_set. Consultare la colonna SS_IS_COLUMN_SET del set di risultati SQLColumns. In alternativa, consultare l'attributo di colonna specifico di SQL Server SQL_CA_SS_IS_COLUMN_SET (ODBC).

Esaminare la colonna SS_IS_COLUMN_SET del set di righe dello schema DBSCHEMA_COLUMNS. In alternativa, esaminare i valori dwFlags restituiti da IColumnsinfo::GetColumnInfo o DBCOLUMNFLAGS nel set di righe restituito da IColumnsRowset::GetColumnsRowset. Per le colonne column_set , DBCOLUMNFLAGS_SS_ISCOLUMNSET verrà impostato (OLE DB).

Questo scenario non è possibile da un'applicazione che usa SQL Server Native Client da una versione precedente a SQL Server 2008 (10.0.x). Tale applicazione, tuttavia, può eseguire query sulle viste di sistema.
Importazione ed esportazione di colonne di tipo sparse tramite BCP per una tabella senza column_set. Nessuna modifica del comportamento rispetto alle versioni precedenti di SQL Server Native Client.
Importazione ed esportazione di colonne di tipo sparse tramite BCP per una tabella con column_set. Il valore column_set viene importato ed esportato in modo analogo a XML, ovvero come varbinary(max), se associato come tipo binario, o come nvarchar(max) se associato come tipo char o wchar.

Le colonne che sono membri del set di colonne column_set di tipo sparse non vengono esportate come colonne distinte, ma vengono esportate solo nel valore di column_set.
Comportamento di queryout per BCP. Nessuna modifica nella gestione delle colonne denominate in modo esplicito rispetto alle versioni precedenti di SQL Server Native Client.

Gli scenari che comportano l'importazione e l'esportazione tra tabelle con schemi diversi possono richiedere una gestione speciale.

Per ulteriori informazioni su BCP, vedere Supporto per la copia bulk (BCP) per colonne di tipo sparse più avanti in questo argomento.

Comportamento dei client legacy

I client restituiscono metadati solo per le colonne che non sono membri del set di colonne column_set di tipo sparse per SQLColumns e DBSCHMA_COLUMNS. I set di righe dello schema OLE DB aggiuntivi introdotti in SQL Server 2008 (10.0.x) Native Client non saranno disponibili, né le modifiche apportate a SQLColumns in ODBC tramite SQL_SOPT_SS_NAME_SCOPE.

I client legacy possono accedere per nome alle colonne che sono membri del set di colonne column_set di tipo sparse e la colonna column_set sarà accessibile come colonna XML per i client e come colonna per i client SQL Server 2005 (9.x).

Supporto per la copia bulk (BCP) per colonne di tipo sparse

Non sono state apportate modifiche all'API BCP in ODBC o OLE DB per le colonne di tipo sparse o column_set funzionalità.

Se una tabella include un set di colonne column_set, le colonne di tipo sparse non verranno gestite come colonne distinte. I valori di tutte le colonne di tipo sparse sono inclusi nel valore di column_set, che viene esportato come una colonna XML, ovvero come varbinary(max), se associato come tipo binario, oppure come nvarchar(max) se associato come tipo char o wchar. Per l'importazione, il valore column_set deve essere conforme allo schema di column_set.

Per le operazioni queryout non esiste alcuna modifica al modo in cui sono gestite le colonne a cui si fa esplicitamente riferimento. Le colonne queryout dispongono dello stesso comportamento delle colonne XML e il fatto che siano o meno di tipo sparse non ha effetto sulla gestione delle colonne di tipo sparse denominate.

Se, tuttavia, si utilizza queryout per l'esportazione e si fa riferimento a colonne di tipo sparse che sono membri del set di colonne di tipo sparse in base al nome, non è possibile eseguire un'importazione diretta in una tabella dalla struttura analoga. Ciò è dovuto al fatto che BCP usa metadati coerenti per un'operazione select * per l'importazione e non è in grado di creare corrispondenze tra le colonne membri del set di colonne column_set e i metadati. Per importare colonne membri del set di colonne column_set singolarmente, è necessario definire una vista nella tabella che fa riferimento alle colonne column_set desiderate ed eseguire l'operazione di importazione utilizzando la vista.

Vedi anche

Programmazione in SQL Server Native Client