Suporte a colunas esparsas em SQL Server Native Client (OLE DB)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)

Importante

O SQL Server Native Client (geralmente abreviado como SNAC) foi removido do SQL Server 2022 (16.x) e do SSMS (SQL Server Management Studio) 19. O provedor OLE DB do SQL Server Native Client (SQLNCLI ou SQLNCLI11) e o Provedor OLE DB herdado da Microsoft para o SQL Server (SQLOLEDB) não são recomendados para um novo desenvolvimento. Alterne para o novo Driver do Microsoft OLE DB para SQL Server (MSOLEDBSQL) no futuro.

Este tópico fornece informações sobre SQL Server Native Client suporte do OLE DB para colunas esparsas. Para obter mais informações sobre colunas esparsas, consulte Suporte a colunas esparsas em SQL Server Native Client. Para ver um exemplo, confira Exibir metadados de colunas e de catálogos para colunas esparsas (OLE DB).

Metadados de instruções do OLE DB

A partir do SQL Server 2008 (10.0.x), um novo valor de sinalizador DBCOLUMNFLAGS, DBCOLUMNFLAGS_SS_ISCOLUMNSET, está disponível. Esse valor deve ser definido para colunas que são valores column_set. O sinalizador DBCOLUMNFLAGS pode ser recuperado por meio do parâmetro dwFlags de IColumnsInfo::GetColumnsInfo e da coluna DBCOLUMN_FLAGS do conjunto de linhas retornado por IColumnsRowset::GetColumnsRowset.

Metadados de catálogo do OLE DB

Duas colunas específicas do SQL Server adicionais foram acrescentadas a DBSCHEMA_COLUMNS.

Nome da coluna Tipo de dados Valor/comentários
SS_IS_SPARSE DBTYPE_BOOL Se a coluna for uma coluna esparsa, seu valor será VARIANT_TRUE; caso contrário, será VARIANT_FALSE.
SS_IS_COLUMN_SET DBTYPE_BOOL Se a coluna for a coluna column_set esparsa, seu valor será VARIANT_TRUE; caso contrário, será VARIANT_FALSE.

Também foram acrescentados dois conjuntos de linhas de esquema adicionais. Estes conjuntos de linhas têm a mesma estrutura que DBSCHEMA_COLUMNS, mas retornam conteúdo diferente. DBSCHEMA_COLUMNS_EXTENDED retorna todas as colunas, independentemente da associação a column_set. DBSCHEMA_SPARSE_COLUMN_SET só retorna colunas que são os membros do column_set esparso.

Comportamento de DataTypeCompatibility do OLE DB

Comportamento com DataTypeCompatibility=80 (na cadeia de conexão) é consistente com um cliente SQL Server 2000 (8.x), como abaixo:

  • Os novos conjuntos de linhas de esquema não são visíveis e não há nenhuma linha para eles nos conjuntos de linhas do esquema.

  • Colunas novas no conjunto de linhas COLUMNS não são visíveis.

  • DBCOLUMNFLAGS_SS_ISCOLUMNSET não é definido para colunas column_set.

  • DBCOMPUTEMODE_NOTCOMPUTED é definido para colunas column_set.

Suporte do OLE DB para colunas esparsas

As seguintes interfaces OLE DB foram modificadas em SQL Server Native Client para dar suporte a colunas esparsas:

Tipo ou função de membro DESCRIÇÃO
IColumnsInfo::GetColumnsInfo Um novo valor de sinalizador DBCOLUMNFLAGS, DBCOLUMNFLAGS_SS_ISCOLUMNSET, é definido para colunas column_set em dwFlags.

DBCOLUMNFLAGS_WRITE é definido para colunas column_set.
IColumsRowset::GetColumnsRowset Um novo valor de sinalizador DBCOLUMNFLAGS, DBCOLUMNFLAGS_SS_ISCOLUMNSET, é definido para colunas column_set em DBCOLUMN_FLAGS.

DBCOLUMN_COMPUTEMODE é definido como DBCOMPUTEMODE_DYNAMIC para colunas column_set.
IDBSchemaRowset::GetSchemaRowset DBSCHEMA_COLUMNS retorna duas colunas novas: SS_IS_COLUMN_SET e SS_IS_SPARSE.

DBSCHEMA_COLUMNS só retorna colunas que não são membros de um column_set.

Foram adicionados dois novos conjuntos de linhas de esquema: DBSCHEMA_COLUMNS_EXTENDED retornará todas as colunas, independentemente da dispersão da associação a column_set. DBSCHEMA_SPARSE_COLUMN_SET só retorna colunas que são os membros de um column_set. Estes conjuntos de linhas novos têm as mesmas colunas e restrições que DBSCHEMA_COLUMNS.
IDBSchemaRowset::GetSchemas IDBSchemaRowset::GetSchemas inclui os GUIDs para os novos conjuntos de linhas DBSCHEMA_COLUMNS_EXTENDED e DBSCHEMA_SPARSE_COLUMN_SET na lista de conjuntos de linhas de esquema disponíveis.
ICommand::Execute Se select * fromtable for usado, ele retornará todas as colunas que não são membros do column_set esparso, além de uma coluna XML que contém os valores de todas as colunas não nulas que são membros do column_set esparso, se estiver presente.
IOpenRowset::OpenRowset IOpenRowset::OpenRowset retorna um conjunto de linhas com as mesmas colunas que ICommand::Execute, com uma consulta select * na mesma tabela.
ITableDefinition Não há nenhuma alteração nessa interface em colunas esparsas ou em colunas column_set. Aplicativos que precisam fazer modificações de esquema devem executar o Transact-SQL apropriado diretamente.

Consulte Também

SQL Server Native Client (OLE DB)