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

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure PDW (Sistema de Plataforma de Análise) do Azure Synapse Analytics

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 o suporte ao OLE DB do SQL Server Native Client para colunas esparsas. Para obter mais informações sobre colunas esparsas, consulte Suporte a colunas esparsas no 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 no 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 * from table 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 valores de todas as colunas não nulas que são membros do column_set esparso, se houver.
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.

Confira também

SQL Server Native Client (OLE DB)