Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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_set
coluna 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.