Partilhar via


Suporte a colunas esparsas no SQL Server Native Client

SQL Server Native Client dá suporte a colunas esparsas. Para obter mais informações sobre colunas esparsas no SQL Server, confira Usar colunas esparsas e Usar conjuntos de colunas.

Para obter mais informações sobre o suporte a colunas esparsas em SQL Server Native Client, consulte Suporte a colunas esparsas (ODBC) e suporte a colunas esparsas (OLE DB).

Para obter informações sobre aplicativos de exemplo que demonstram esse recurso, confira Amostras de programação do SQL Server Data.

Cenários de usuário para colunas esparsas e o SQL Server Native Client

A tabela a seguir resume os cenários comuns de usuário para usuários SQL Server Native Client com colunas esparsas:

Cenário Comportamento
select * from table ou IOpenRowset::OpenRowset. Retorna 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 membros do column_set esparso.
Referenciar uma coluna por nome. A coluna pode ser referenciada independentemente de seu status de coluna esparsa ou associação do column_set.
Acessar colunas de membro do column_set através de uma coluna de XML computada. As colunas que são membros do column_set esparso podem ser acessadas selecionando o column_set por nome e podem ter valores inseridos e atualizados atualizando o XML na coluna column_set.

O valor precisa estar de acordo com o esquema para colunas column_set.
Recuperar metadados para todas as colunas em uma tabela por meio de SQLColumns com um padrão de pesquisa de coluna de NULL ou '%' (ODBC); ou por meio do conjunto de linhas de esquema DBSCHEMA_COLUMNS sem nenhuma restrição de coluna (OLE DB). Retorna uma linha para todas as colunas que não são membros de um column_set. Se a tabela tiver um column_set esparso, uma linha será retornada para ela.

Observe que essa ação não retorna metadados para colunas que são membros de um column_set.
Recuperar metadados para todas as colunas, independentemente de dispersão ou associação em um column_set. Essa ação pode retornar um número muito grande de linhas. Defina o campo descritor SQL_SOPT_SS_NAME_SCOPE como SQL_SS_NAME_SCOPE_EXTENDED e chame SQLColumns (ODBC).

Chame IDBSchemaRowset::GetRowset para o conjunto de linhas de esquema DBSCHEMA_COLUMNS_EXTENDED (OLE DB).

Esse cenário não é possível em um aplicativo que usa SQL Server Native Client de uma versão anterior a SQL Server 2008. Entretanto, esse aplicativo poderia consultar exibições de sistema diretamente.
Recuperar metadados somente para colunas que são membros de um column_set. Essa ação pode retornar um número muito grande de linhas. Defina o campo descritor SQL_SOPT_SS_NAME_SCOPE como SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET e chame SQLColumns (ODBC).

Chame IDBSchemaRowset::GetRowset para o conjunto de linhas de esquema DBSCHEMA_SPARSE_COLUMN_SET (OLE DB).

Esse cenário não é possível em um aplicativo que usa SQL Server Native Client de uma versão anterior a SQL Server 2008. Entretanto, esse aplicativo poderia consultar exibições de sistema.
Determinar se uma coluna está esparsa. Consulte a coluna SS_IS_SPARSE do conjunto de resultados SQLColumns (ODBC).

Consulte a coluna SS_IS_SPARSE do conjunto de linhas de esquema de DBSCHEMA_COLUMNS (OLE DB).

Esse cenário não é possível em um aplicativo que usa SQL Server Native Client de uma versão anterior a SQL Server 2008. Entretanto, esse aplicativo poderia consultar exibições de sistema.
Determinar se uma coluna é um column_set. Consulte a coluna SS_IS_COLUMN_SET do conjunto de resultados SQLColumns. Ou consulte o SQL Server SQL_CA_SS_IS_COLUMN_SET de atributo de coluna específico (ODBC).

Consulte a coluna SS_IS_COLUMN_SET do conjunto de linhas de esquema de DBSCHEMA_COLUMNS. Ou então, confira dwFlags retornado por IColumnsinfo::GetColumnInfo ou DBCOLUMNFLAGS no conjunto de linhas retornado por IColumnsRowset::GetColumnsRowset. Para colunas column_set, DBCOLUMNFLAGS_SS_ISCOLUMNSET será definido (OLE DB).

Esse cenário não é possível em um aplicativo que usa SQL Server Native Client de uma versão anterior a SQL Server 2008. Entretanto, esse aplicativo poderia consultar exibições de sistema.
Importar e exportar colunas esparsas por BCP para uma tabela sem column_set. Nenhuma alteração no comportamento das versões anteriores do SQL Server Native Client.
Importar e exportar colunas esparsas por BCP para uma tabela com column_set. O column_set é importado e exportado da mesma forma que XML; ou seja, como varbinary(max) se estivesse associado como um tipo binário ou como nvarchar(max) se estivesse associado como um char tipo ou wchar .

Colunas que são membros do column_set esparso não são exportadas como colunas distintas; elas só são exportadas no valor do column_set.
Comportamento de queryout para BCP. Nenhuma alteração no tratamento de colunas nomeadas explicitamente de versões anteriores do SQL Server Native Client.

Cenários que envolvem importação e exportação entre tabelas com esquemas diferentes podem exigir manipulação especial.

Para obter mais informações sobre BCP, consulte Suporte de BCP (cópia em massa) a colunas esparsas, mais adiante neste tópico.

Comportamento do cliente de versão anterior

Os clientes de nível inferior retornarão metadados apenas para colunas que não são membros do esparso column_set para SQLColumns e DBSCHMA_COLUMNS. Os conjuntos de linhas de esquema OLE DB adicionais introduzidos no SQL Server 2008 Native Client não estarão disponíveis, nem as modificações em SQLColumns no ODBC por meio de SQL_SOPT_SS_NAME_SCOPE.

Clientes de nível inferior podem acessar colunas que são membros do esparso column_set por nome e a column_set coluna será acessível como uma coluna XML para SQL Server clientes de 2005.

Suporte de BCP (cópia em massa) a colunas esparsas

Não há nenhuma alteração à API de BCP em ODBC ou OLE DB para as colunas esparsas ou os recursos de column_set.

Se uma tabela tiver um column_set, as colunas esparsas não serão tratadas como colunas distintas. Os valores de todas as colunas esparsas são incluídos no valor do column_set, que é exportado da mesma forma que uma coluna XML; ou seja, como varbinary(max) se estivesse associado como um tipo binário ou como nvarchar(max) se estivesse associado como um char tipo ou wchar ). Na importação, o valor de column_set deve estar de acordo com o esquema do column_set.

Para operações de queryout, não há alterações na maneira como são tratadas as colunas referenciadas explicitamente. As colunas de column_set têm o mesmo comportamento das colunas XML e a dispersão não tem efeito sobre o tratamento de colunas esparsas nomeadas.

Entretanto, se queryout for usado para exportação e você referenciar colunas esparsas que são membros do conjunto de colunas esparsas por nome, não será possível executar uma importação direta para uma tabela de estrutura semelhante. Isso ocorre porque o BCP usa metadados consistentes com uma operação select * para a importação e não consegue corresponder column_set colunas de membro com esses metadados. Para importar as colunas de membro de column_set individualmente, você precisa definir uma exibição na tabela que referencia as colunas de column_set desejadas, além de executar a operação de importação usando a exibição.

Consulte Também

Programação do SQL Server Native Client