Condividi tramite


Supporto per colonne di tipo sparse in SQL Server Native Client

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

Per ulteriori informazioni sul supporto per colonne di tipo sparse in SQL Server Native Client, vedere Supporto per colonne di tipo sparse (ODBC) e Supporto per colonne di tipo sparse (OLE DB).

Per informazioni sulle applicazioni di esempio in cui viene illustrata questa funzionalità, vedere Considerazioni per l'installazione di esempi e di database di esempio di SQL Server.

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

Nella tabella seguente vengono descritti in breve gli scenari comuni per gli utenti di SQL Server Native Client che utilizzano 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 e 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 metadati per tutte le colonne in una tabella tramite SQLColumns con un criterio di ricerca delle colonne NULL o '%' (ODBC) oppure tramite il set di righe dello schema DBSCHEMA_COLUMNS senza alcuna restrizione relativa alle colonne (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 di descrizione SQL_SOPT_SS_NAME_SCOPE su SQL_SS_NAME_SCOPE_EXTENDED e chiamare SQLColumns (ODBC).

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

Questo scenario non è possibile da un'applicazione che utilizza SQL Server Native Client da una versione precedente a SQL Server 2008. Tale applicazione, tuttavia, può 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 di descrizione SQL_SOPT_SS_NAME_SCOPE su SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET e chiamare SQLColumns (ODBC).

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

Questo scenario non è possibile da un'applicazione che utilizza 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.

Esaminare 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 utilizza 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 set di colonne column_set.

Esaminare la colonna SS_IS_COLUMN_SET del set di risultati SQLColumns (ODBC). In alternativa, esaminare 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 dwFlags restituito da IColumnsinfo::GetColumnInfo o DBCOLUMNFLAGS nel set di righe restituito da IColumnsRowset::GetColumnsRowset. Per le colonne column_set, DBCOLUMNFLAGS_SS_ISCOLUMNSET sarà impostato (OLE DB).

Questo scenario non è possibile da un'applicazione che utilizza SQL Server Native Client da una versione precedente a SQL Server 2008. 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 nel 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 set di colonne column_set viene importato ed esportato allo stesso modo che in 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 di 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 Native Client non saranno disponibili, né lo saranno 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 SQL Server 2005 e come colonna ntext per i client SQL Server 2000.

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

Non è stata apportata alcuna modifica all'API BCP in ODBC o OLE DB per le colonne di tipo sparse o le funzionalità column_set.

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 colonna varbinary(max) se associata come tipo binario oppure come colonna nvarchar(max) se associata come tipo char o wchar. All'importazione, il valore di column_set deve essere conforme allo schema di column_set.

Per le operazioni queryout, non è stata apportata alcuna modifica alla modalità di gestione delle colonne cui si fa riferimento in modo esplicito. Le colonne column_set hanno lo stesso comportamento delle colonne XML e il fatto di essere di tipo sparse non ha alcun 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 utilizza metadati consistenti con 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.