Supporto per colonne di tipo sparse (OLE DB)
In questo argomento vengono fornite informazioni sul supporto OLE DB di SQL Server Native Client per le colonne di tipo sparse. Per ulteriori informazioni sulle colonne di tipo sparse, vedere Supporto per colonne di tipo sparse in SQL Server Native Client. Per un esempio, vedere Visualizzare i metadati della colonna e del catalogo per le colonne di tipo sparse (OLE DB).
Metadati di istruzione OLE DB
A partire da SQL Server 2008, è disponibile un nuovo valore per il flag DBCOLUMNFLAGS, ovvero DBCOLUMNFLAGS_SS_ISCOLUMNSET. Questo valore deve essere impostato per colonne che sono valori column_set. Il flag DBCOLUMNFLAGS può essere recuperato tramite il parametro dwFlags di IColumnsInfo::GetColumnsInfo e la colonna DBCOLUMN_FLAGS del set di righe restituito da IColumnsRowset::GetColumnsRowset.
Metadati del catalogo OLE DB
Due colonne aggiuntive specifiche di SQL Server sono state aggiunte a DBSCHEMA_COLUMNS.
Nome colonna |
Tipo di dati |
Valore/commenti |
---|---|---|
SS_IS_SPARSE |
DBTYPE_BOOL |
Se la colonna è una colonna di tipo sparse, il valore di questa colonna è VARIANT_TRUE; in caso contrario, è VARIANT_FALSE. |
SS_IS_COLUMN_SET |
DBTYPE_BOOL |
Se la colonna è una colonna column_set di tipo sparse, il valore di questa colonna è VARIANT_TRUE; in caso contrario, è VARIANT_FALSE. |
Sono inoltre stati aggiunti altri due set di righe dello schema. Tali set di righe hanno la stessa struttura di DBSCHEMA_COLUMNS ma restituiscono contenuto diverso. DBSCHEMA_COLUMNS_EXTENDED restituisce tutte le colonne indipendentemente dall'appartenenza a column_set. DBSCHEMA_SPARSE_COLUMN_SET restituisce solo le colonne che sono colonne column_set di tipo sparse.
Comportamento OLE DB di DataTypeCompatibility
Il comportamento con DataTypeCompatibility=80 (nella stringa di connessione) è coerente con un client SQL Server 2000, come indicato di seguito:
I nuovi set di righe dello schema non sono visibili e i set di righe dello schema non includono righe per essi.
Le nuove colonne nel set di righe COLUMNS non sono visibili.
DBCOLUMNFLAGS_SS_ISCOLUMNSET non è impostato per le colonne column_set.
DBCOMPUTEMODE_NOTCOMPUTED è impostato per le colonne column_set.
Supporto OLE DB per colonne di tipo sparse
Le interfacce OLE DB seguenti sono state modificate in SQL Server Native Client per supportare le colonne di tipo sparse:
Tipo o funzione membro |
Descrizione |
---|---|
IColumnsInfo::GetColumnsInfo |
Un nuovo valore del flag DBCOLUMNFLAGS, ovvero DBCOLUMNFLAGS_SS_ISCOLUMNSET, è impostato per le colonne column_set in dwFlags. DBCOLUMNFLAGS_WRITE è impostato per le colonne column_set. |
IColumsRowset::GetColumnsRowset |
Un nuovo valore del flag DBCOLUMNFLAGS, ovvero DBCOLUMNFLAGS_SS_ISCOLUMNSET, è impostato per le colonne column_set in DBCOLUMN_FLAGS. DBCOLUMN_COMPUTEMODE è impostato su DBCOMPUTEMODE_DYNAMIC per le colonne column_set. |
IDBSchemaRowset::GetSchemaRowset |
DBSCHEMA_COLUMNS restituisce due nuove colonne: SS_IS_COLUMN_SET e SS_IS_SPARSE. DBSCHEMA_COLUMNS restituisce solo colonne che non sono membri di column_set. Sono stati aggiunti due nuovi set di righe dello schema: DBSCHEMA_COLUMNS_EXTENDED restituirà tutte le colonne indipendentemente dal fatto che siano o meno di tipo sparse o dall'appartenenza a column_set. DBSCHEMA_SPARSE_COLUMN_SET restituisce solo le colonne che sono membri di column_set. Questi nuovi set di righe includono le stesse colonne e comportano le stesse restrizioni di DBSCHEMA_COLUMNS. |
IDBSchemaRowset::GetSchemas |
IDBSchemaRowset::GetSchemas include i GUID per i nuovi set di righe DBSCHEMA_COLUMNS_EXTENDED e DBSCHEMA_SPARSE_COLUMN_SET nell'elenco dei set di righe dello schema disponibili. |
ICommand::Execute |
Se si utilizza select * from table, vengono restituite 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 membri del set di colonne column_set di tipo sparse, se presente. |
IOpenRowset::OpenRowset |
IOpenRowset::OpenRowset restituisce un set di righe con le stesse colonne di ICommand::Execute, con una query select * nella stessa tabella. |
ITableDefinition |
Non è stata apportata alcuna modifica a questa interfaccia per le colonne di tipo sparse o per le colonne column_set. Le applicazioni che devono apportare modifiche allo schema devono eseguire direttamente l'istruzione Transact-SQL appropriata. |