Supporto per colonne di tipo sparse in SQL Server Native Client
SQL Server Native Client supporta colonne 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 sparse in SQL Server Native Client, vedere Supporto colonne sparse (ODBC) e Supporto colonne sparse (OLE DB).
Per informazioni sulle applicazioni di esempio in cui viene illustrata questa funzionalità, vedere la pagina relativa agli 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 SQL Server Native Client con colonne 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 i metadati per tutte le colonne in una tabella tramite SQLColumns con un modello di ricerca di colonne NULL o '%' (ODBC); o tramite il set di righe dello schema DBSCHEMA_COLUMNS senza restrizioni 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. 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 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 set di colonne column_set . |
Consultare la colonna SS_IS_COLUMN_SET del set di risultati SQLColumns. In alternativa, consultare l'attributo di colonna specifico 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 sarà 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. |
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 . |
L'oggetto column_set viene importato ed esportato nello stesso modo di XML, ovvero varbinary(max) se associato come tipo binario o come nvarchar(max) se associato come char tipo 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 dalle 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 a livello inferiore restituiscono metadati solo per le colonne che non sono membri dello 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 a livello inferiore possono accedere alle colonne che sono membri del tipo sparse column_set
per nome e la column_set
colonna sarà accessibile come colonna XML per SQL Server 2005 client.
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 caratteristiche 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 sparse sono inclusi nel valore di , che viene esportato nello stesso modo di column_set
una colonna XML, come varbinary(max)
se associato come tipo binario o nvarchar(max)
come se associato come tipo wchar o associato come char
tipo wchar. All'importazione, il valore di 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 column_set
dispongono dello stesso comportamento delle colonne XML e il fatto che siano o meno di tipo sparse non ha effetto sulla gestione di 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. Questo perché BCP usa i metadati coerenti con un'operazione select * per l'importazione e non è in grado di corrispondere column_set
alle colonne membro con questi 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.