Suporte a colunas esparsas no SQL Server Native Client

O SQL Server Native Client suporta colunas esparsas. Para obter mais informações sobre colunas esparsas no SQL Server, consulte Usando colunas esparsas e Usando conjuntos de colunas.

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

Para obter informações sobre aplicativos de exemplo que demonstram esse recurso, consulte Considerações para instalar exemplos e bancos de dados de exemplo do SQL Server.

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

A tabela a seguir resume os cenários comuns para usuários do 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 através de SQLColumns com um padrão de pesquisa de coluna de NULL ou ‘%’ (ODBC); ou através do conjunto de linhas de esquema DBSCHEMA_COLUMNS sem 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 do 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 de DBSCHEMA_COLUMNS_EXTENDED (OLE DB).

Esse cenário não é possível com um aplicativo que usa o SQL Server Native Client de uma versão anterior ao 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 do 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 de DBSCHEMA_SPARSE_COLUMN_SET (OLE DB).

Esse cenário não é possível com um aplicativo que usa o SQL Server Native Client de uma versão anterior ao 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 com um aplicativo que usa o SQL Server Native Client de uma versão anterior ao 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 então, consulte o atributo de coluna específico do SQL Server, SQL_CA_SS_IS_COLUMN_SET (ODBC).

Consulte a coluna SS_IS_COLUMN_SET do conjunto de linhas de esquema de DBSCHEMA_COLUMNS. Ou então, consulte 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 com um aplicativo que usa o SQL Server Native Client de uma versão anterior ao 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 em comportamento de 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 maneira que o XML, ou seja, como varbinary(max) se for estiver associado como tipo binário ou como nvarchar(max) se estiver associado como tipo char 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 na manipulação 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 versão anterior retornarão metadados somente para colunas que não são membros do column_set esparso para SQLColumns e DBSCHMA_COLUMNS. Os conjuntos de linhas de esquema de OLE adicionais introduzidos no SQL Server 2008 Native Client não estarão disponíveis, nem as modificações no SQLColumns em ODBC via SQL_SOPT_SS_NAME_SCOPE.

Os clientes de versão anterior podem acessar as colunas que são membros do column_set esparso por nome, e a coluna column_set poderá ser acessada como uma coluna XML por clientes do SQL Server 2005 e como uma coluna ntext por clientes do SQL Server 2000.

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 serão incluídos no valor do column_set, que é exportado da mesma maneira que uma coluna XML, ou seja, como varbinary(max) se estiver associado como tipo binário ou como nvarchar(max) se estiver associado como tipo char 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 acontece porque o BCP usa metadados de maneira consistente com uma operação de select * para a importação e é incapaz de corresponder às colunas de membro de column_set 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

Outros recursos