Condividi tramite


Supporto per colonne di tipo sparse in SQL Server Native Client

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).

Per informazioni sulle applicazioni di esempio che illustrano questa funzionalità, vedere Esempi di programmazione dati di SQL Server.

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:

Sceneggiatura Comportamento
select * from table o IOpenRowset::OpenRowset. Restituisce tutte le colonne che non sono membri del tipo sparse column_set, oltre a una colonna XML contenente i valori di tutte le colonne non Null che sono membri dell'oggetto sparse column_set.
Fare riferimento a una colonna in base al nome. È possibile fare riferimento alla colonna indipendentemente dallo stato della colonna di tipo sparse o column_set dall'appartenenza.
Accedere alle column_set colonne membro tramite una colonna XML calcolata. È possibile accedere alle colonne che sono membri del tipo sparse column_set selezionando in base al column_set nome ed è possibile inserire e aggiornare i valori aggiornando il codice XML nella column_set colonna.

Il valore deve essere conforme allo schema per column_set le colonne.
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 oggetto column_set. Se la tabella contiene un tipo di dati di tipo sparse column_set, verrà restituita una riga.

Si noti che questo non restituisce metadati per le colonne che sono membri di un oggetto column_set.
Recuperare i metadati per tutte le colonne, indipendentemente dalla sparsezza o dall'appartenenza a un oggetto 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. Tuttavia, tale applicazione potrebbe eseguire query direttamente sulle viste di sistema.
Recuperare i metadati solo per le colonne che sono membri di un oggetto 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. 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. Tale applicazione, tuttavia, può eseguire query sulle viste di sistema.
Determinare se una colonna è un oggetto 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 column_set le colonne, 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. Tale applicazione, tuttavia, può eseguire query sulle viste di sistema.
Importare ed esportare colonne di tipo sparse da BCP per una tabella senza column_set. Nessuna modifica del comportamento rispetto alle versioni precedenti di SQL Server Native Client.
Importare ed esportare colonne di tipo sparse da BCP per una tabella con .column_set Viene column_set importato ed esportato nello stesso modo di XML, ovvero come varbinary(max) se associato come tipo binario o come nvarchar(max) se associato come char tipo o wchar .

Le colonne che sono membri del tipo sparse column_set non vengono esportate come colonne distinte, ma vengono esportate solo nel valore di column_set.
queryout comportamento 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 di livello inferiore restituiscono metadati solo per le colonne che non sono membri del tipo sparse column_set per SQLColumns e DBSCHMA_COLUMNS. I set di righe dello schema OLE DB aggiuntivi introdotti in SQL Server 2008 Native Client non saranno disponibili né le modifiche apportate a SQLColumns in ODBC tramite SQL_SOPT_SS_NAME_SCOPE.

I client di livello inferiore possono accedere alle colonne che sono membri del sparse column_set in base al nome e la column_set colonna sarà accessibile come colonna XML ai client di SQL Server 2005.

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 o column_set le funzionalità di tipo sparse.

Se una tabella contiene un column_set, le colonne di tipo sparse non vengono gestite come colonne distinte. I valori di tutte le colonne di tipo sparse sono inclusi nel valore di column_set, che viene esportato nello stesso modo di una colonna XML, ovvero come varbinary(max) se associato come tipo binario o come nvarchar(max) se associato come char tipo o wchar . In caso di importazione, il column_set valore deve essere conforme allo schema dell'oggetto column_set.

Per queryout le operazioni, non viene apportata alcuna modifica al modo in cui vengono gestite le colonne a cui viene fatto riferimento in modo esplicito. column_set le colonne hanno lo stesso comportamento delle colonne XML e la sparsezza non ha alcun effetto sulla gestione delle colonne sparse denominate.

Tuttavia, se queryout viene usato 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 strutturata in modo analogo. Il motivo è che BCP usa metadati coerenti con un'operazione select * per l'importazione e non è in grado di associare column_set le colonne membro con questi metadati. Per importare column_set le colonne membro singolarmente, è necessario definire una vista nella tabella che fa riferimento alle colonne desiderate column_set ed eseguire l'operazione di importazione usando la vista.

Vedere anche

Programmazione in SQL Server Native Client