Suporte a colunas esparsas no SQL Server Native Client
Importante
SQL Server Native Client (SNAC) não é fornecido com:
- SQL Server 2022 (16.x) e versões posteriores
- SQL Server Management Studio 19 e versões posteriores
O SQL Server Native Client (SQLNCLI ou SQLNCLI11) e o Microsoft OLE DB Provider for SQL Server (SQLOLEDB) herdado não são recomendados para o desenvolvimento de novos aplicativos.
Para novos projetos, use um dos seguintes drivers:
Para SQLNCLI fornecido como um componente do Mecanismo de Banco de Dados do SQL Server (versões de 2012 a 2019), consulte esta exceção Ciclo de vida do suporte.
O SQL Server Native Client oferece suporte a colunas esparsas. Para obter mais informações sobre colunas esparsas no SQL Server, consulte 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 de suporte a colunas esparsas (ODBC) e Suporte a colunas esparsas (OLE DB).
Cenários de usuário para colunas esparsas e 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 |
---|---|
selecione * na tabela ou IOpenRowset::OpenRowset. | Retorna todas as colunas que não são membros do column_setesparso , além de uma coluna XML que contém os valores de todas as colunas não nulas que são membros do column_setesparso. |
Faça referência a uma coluna pelo nome. | A coluna pode ser referenciada independentemente de seu status de coluna esparsa ou associação column_set. |
Acesse column_set colunas de membros por meio de uma coluna XML computada. | As colunas que são membros do column_set esparso podem ser acessadas selecionando o column_set pelo nome e podem ter valores inseridos e atualizados atualizando o XML na coluna column_set. O valor deve estar em conformidade com o esquema para column_set colunas. |
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 uma column_setesparsa, uma linha será retornada para ela. Observe que isso não retorna metadados para colunas que são membros de um column_set. |
Recupere metadados para todas as colunas, independentemente da parcimônia ou associação a um column_set. Isso pode retornar um número muito grande de linhas. | Defina o campo descritor SQL_SOPT_SS_NAME_SCOPE para SQL_SS_NAME_SCOPE_EXTENDED e chamar SQLColumns (ODBC). Chame IDBSchemaRowset::GetRowset para o conjunto de linhas do esquema DBSCHEMA_COLUMNS_EXTENDED (OLE DB). Esse cenário não é possível a partir de um aplicativo que usa o SQL Server Native Client de uma versão anterior ao SQL Server 2008 (10.0.x). No entanto, tal aplicativo pode consultar visualizações do sistema diretamente. |
Recupere metadados somente para colunas que são membros de um column_set. Isso pode retornar um número muito grande de linhas. | Defina o campo descritor SQL_SOPT_SS_NAME_SCOPE para SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET e chamar SQLColumns (ODBC). Chame IDBSchemaRowset::GetRowset para o conjunto de linhas do esquema DBSCHEMA_SPARSE_COLUMN_SET (OLE DB). Esse cenário não é possível a partir de um aplicativo que usa o SQL Server Native Client de uma versão anterior ao SQL Server 2008 (10.0.x). No entanto, tal aplicativo pode consultar visualizações do sistema. |
Determine se uma coluna é esparsa. | Consulte a coluna SS_IS_SPARSE do conjunto de resultados SQLColumns (ODBC). Consulte a coluna SS_IS_SPARSE do conjunto de linhas do esquema DBSCHEMA_COLUMNS (OLE DB). Esse cenário não é possível a partir de um aplicativo que usa o SQL Server Native Client de uma versão anterior ao SQL Server 2008 (10.0.x). No entanto, tal aplicativo pode consultar visualizações do 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 atributo de coluna específico do SQL Server). Consulte a coluna SS_IS_COLUMN_SET do conjunto de linhas do esquema DBSCHEMA_COLUMNS. Ou, consulte dwFlags retornados 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 a partir de um aplicativo que usa o SQL Server Native Client de uma versão anterior ao SQL Server 2008 (10.0.x). No entanto, tal aplicativo pode consultar visualizações do sistema. |
Importação e exportação de colunas esparsas por BCP para uma tabela sem column_set. | Nenhuma alteração no comportamento de versões anteriores do SQL Server Native Client. |
Importação e exportação de colunas esparsas por BCP para uma tabela com um column_set. | O As colunas que são membros do column_set esparso não são exportadas como colunas distintas; só são exportados no valor do column_set. |
queryout comportamento para BCP. | Nenhuma alteração no processamento de colunas explicitamente nomeadas 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 tratamento especial. Para obter mais informações sobre BCP, consulte Suporte de cópia em massa (BCP) para colunas esparsas, mais adiante neste tópico. |
Down-Level Comportamento do Cliente
Os clientes de nível inferior retornarão metadados somente para colunas que não são membros do column_set esparso para SQLColumns e DBSCHEMA_COLUMNS. Os conjuntos de linhas de esquema OLE DB adicionais introduzidos no SQL Server 2008 (10.0.x) Native Client não estarão disponíveis, nem as modificações para SQLColumns no ODBC via SQL_SOPT_SS_NAME_SCOPE.
Os clientes de nível inferior podem acessar colunas que são membros do column_set esparso pelo nome, e a coluna column_set será acessível como uma coluna XML para clientes do SQL Server 2005 (9.x).
Suporte de cópia em massa (BCP) para colunas esparsas
Não há alterações na API BCP em ODBC ou OLE DB para colunas esparsas ou recursos column_set.
Se uma tabela tiver um column_set, 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 vinculado como um tipo binário, ou como nvarchar(max) se vinculado como um char ou wchar tipo). Na importação, o valor column_set deve estar em conformidade com o esquema do column_set.
Para operações de de consulta, não há nenhuma alteração na maneira como as colunas explicitamente referenciadas são tratadas. column_set colunas têm o mesmo comportamento que as colunas XML e a esparsidade não tem efeito no processamento de colunas esparsas nomeadas.
No entanto, se de consulta for usada para exportação e você fizer referência a colunas esparsas que são membros da coluna esparsa definida pelo nome, não será possível executar uma importação direta em uma tabela estruturada de forma 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 column_set colunas de membro individualmente, você deve definir um modo de exibição na tabela que faça referência às colunas de column_set desejadas e executar a operação de importação usando o modo de exibição.