Partilhar via


Suporte a colunas esparsas no SQL Server Native Client

O SQL Server Native Client oferece 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 no 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, consulte exemplos de programação de dados 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 de usuário 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 da esparsa column_set, além de uma coluna XML que contém os valores de todas as colunas não nulas que são membros da esparsa column_set.
Referenciar uma coluna por nome. A coluna pode ser referenciada independentemente de seu status de coluna esparsa ou column_set associação.
Acesse column_set colunas de membro por meio de uma coluna XML computada. As colunas que são membros da esparsa column_set podem ser acessadas selecionando o column_set nome por nome e podem ter valores inseridos e atualizados atualizando o XML na column_set coluna.

O valor deve estar em conformidade com o esquema de column_set colunas.
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 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 esparso column_set, uma linha será retornada para ela.

Observe que isso não retorna metadados para colunas que são membros de um column_set.
Recuperar metadados para todas as colunas, independentemente da esparsidade ou associação em um column_set. Essa ação pode retornar um número muito grande de linhas. Defina o campo de 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 o SQL Server Native Client de uma versão anterior ao SQL Server 2008. No entanto, esse aplicativo pode consultar exibições do 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 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 em 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.
Determine se uma coluna é um column_set. Consulte a coluna SS_IS_COLUMN_SET do conjunto de resultados SQLColumns. Ou consulte o ODBC (SQL_CA_SS_IS_COLUMN_SET de atributos de coluna específico do SQL Server).

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 column_set colunas, DBCOLUMNFLAGS_SS_ISCOLUMNSET será definido (OLE DB).

Esse cenário não é possível em 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 no comportamento das versões anteriores do SQL Server Native Client.
Importar e exportar colunas esparsas por BCP para uma tabela com um column_set. O column_set é importado e exportado da mesma maneira 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 .

As colunas que são membros da esparsa column_set não são exportadas como colunas distintas; elas são exportadas apenas no valor do column_set.
queryout comportamento 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 da esparsa 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 estará acessível como uma coluna XML para clientes do SQL Server 2005.

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

Não há nenhuma alteração na API bcp em ODBC ou OLE DB para as colunas ou recursos esparsos column_set .

Se uma tabela tiver uma column_setcoluna esparsa, 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 ). Ao importar, o column_set valor deve estar em conformidade com o esquema do column_set.

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

No entanto, se queryout for usado para exportação e você fizer referência a colunas esparsas que são membros da coluna esparsa definida pelo nome, você não poderá executar uma importação direta em uma tabela estruturada da mesma forma. 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 column_set colunas de membro individualmente, você deve definir um modo de exibição na tabela que referencia as colunas desejadas column_set e executar a operação de importação usando a exibição.

Consulte Também

Programação do SQL Server Native Client