Suporte a colunas esparsas no SQL Server Native ClientSparse Columns Support in SQL Server Native Client

Este tópico aplica-se a: Simdo SQL ServerSimbanco de dados do SQL AzureSimAzure SQL Data Warehouse Sim Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

O SQL ServerSQL Server Native Client suporta colunas esparsas. SQL ServerSQL Server Native Client supports sparse columns. Para obter mais informações sobre colunas esparsas no SQL ServerSQL Server, consulte usar colunas esparsas e usar conjuntos de colunas.For more information about sparse columns in SQL ServerSQL Server, see Use Sparse Columns and Use Column Sets.

Para obter mais informações sobre colunas esparsas suporte no SQL ServerSQL Server Native Client, consulte suporte a colunas esparsas ( ODBC ) e suporte a colunas esparsas ( OLE DB ).For more information about sparse column support in SQL ServerSQL Server Native Client, see Sparse Columns Support (ODBC) and Sparse Columns Support (OLE DB).

Para obter informações sobre aplicativos de exemplo que demonstram esse recurso, consulte exemplos de programação de dados do SQL Server.For information about sample applications that demonstrate this feature, see SQL Server Data Programming Samples.

Cenários de usuário para colunas esparsas e o SQL Server Native ClientUser Scenarios for Sparse Columns and SQL Server Native Client

A tabela a seguir resume os cenários comuns para usuários do SQL ServerSQL Server Native Client com colunas esparsas:The following table summarizes the common user scenarios for SQL ServerSQL Server Native Client users with sparse columns:

CenárioScenario ComportamentoBehavior
Selecione * da tabela ou IOpenRowset:: OPENROWSET.select * from table or IOpenRowset::OpenRowset. Retorna todas as colunas que não são membros de esparso column_set, além de uma coluna XML que contém os valores de todas as colunas não nulas que são membros de esparso column_set.Returns all columns that are not members of the sparse column_set, plus an XML column that contains the values of all non-null columns that are members of the sparse column_set.
Referenciar uma coluna por nome.Reference a column by name. A coluna pode ser referenciada independentemente de seu status de coluna esparsa ou column_set associação.The column can be referenced regardless of its sparse column status or column_set membership.
Acesso column_set colunas de membro por meio de uma coluna XML computada.Access column_set member columns through a computed XML column. Colunas que são membros de esparso column_set podem ser acessadas selecionando o column_set por nome e podem ter valores inseridos e atualizados atualizando o XML no column_set coluna.Columns that are members of the sparse column_set can be accessed by selecting the column_set by name and can have values inserted and updated by updating the XML in the column_set column.

O valor deve estar de acordo com o esquema para column_set colunas.The value must conform to the schema for column_set columns.
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).Retrieve metadata for all columns in a table through SQLColumns with a column search pattern of NULL or ‘%’ (ODBC); or through the DBSCHEMA_COLUMNS schema rowset with no column restriction (OLE DB). Retorna uma linha para todas as colunas que não são membros de um column_set.Returns a row for all columns that are not members of a column_set. Se a tabela tiver um esparso column_set, uma linha será retornada para ela.If the table has a sparse column_set, a row will be returned for it.

Observe que isso não retorna metadados para colunas que são membros de um column_set.Note that this does not return metadata for columns that are members of a column_set.
Recuperar metadados para todas as colunas, independentemente de dispersão ou associação em um column_set.Retrieve metadata for all columns, regardless of sparseness or membership in a column_set. Essa ação pode retornar um número muito grande de linhas.This might return a very large number of rows. Defina o campo do descritor SQL_SOPT_SS_NAME_SCOPE como SQL_SS_NAME_SCOPE_EXTENDED e chame SQLColumns (ODBC).Set the descriptor field SQL_SOPT_SS_NAME_SCOPE to SQL_SS_NAME_SCOPE_EXTENDED and call SQLColumns (ODBC).

Chame IDBSchemaRowset:: Getrowset para o conjunto de linhas de esquema DBSCHEMA_COLUMNS_EXTENDED (OLE DB).Call IDBSchemaRowset::GetRowset for the DBSCHEMA_COLUMNS_EXTENDED schema rowset (OLE DB).

Esse cenário não é possível com um aplicativo que usa o SQL ServerSQL Server Native Client de uma versão anterior ao SQL Server 2008SQL Server 2008.This scenario is not possible from an application that uses SQL ServerSQL Server Native Client from a release earlier than SQL Server 2008SQL Server 2008. No entanto, esse aplicativo poderia consultar exibições de sistema diretamente.However, such an application could query system views directly.
Recuperar metadados somente para colunas que são membros de um column_set.Retrieve metadata only for columns that are members of a column_set. Essa ação pode retornar um número muito grande de linhas.This might return a very large number of rows. Defina o campo do descritor SQL_SOPT_SS_NAME_SCOPE como SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET e chame SQLColumns (ODBC).Set the descriptor field SQL_SOPT_SS_NAME_SCOPE to SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET and call SQLColumns (ODBC).

Chame IDBSchemaRowset:: Getrowset para o conjunto de linhas de esquema DBSCHEMA_SPARSE_COLUMN_SET (OLE DB).Call IDBSchemaRowset::GetRowset for the DBSCHEMA_SPARSE_COLUMN_SET schema rowset (OLE DB).

Esse cenário não é possível com um aplicativo que usa o SQL ServerSQL Server Native Client de uma versão anterior ao SQL Server 2008SQL Server 2008.This scenario is not possible from an application that uses SQL ServerSQL Server Native Client from a release earlier than SQL Server 2008SQL Server 2008. Entretanto, esse aplicativo poderia consultar exibições de sistema.However, such an application could query system views.
Determinar se uma coluna está esparsa.Determine whether a column is sparse. Consulte a coluna SS_IS_SPARSE do conjunto de resultados SQLColumns (ODBC).Consult the SS_IS_SPARSE column of the SQLColumns result set (ODBC).

Consulte a coluna SS_IS_SPARSE do conjunto de linhas de esquema de DBSCHEMA_COLUMNS (OLE DB).Consult the SS_IS_SPARSE column of the DBSCHEMA_COLUMNS schema rowset (OLE DB).

Esse cenário não é possível com um aplicativo que usa o SQL ServerSQL Server Native Client de uma versão anterior ao SQL Server 2008SQL Server 2008.This scenario is not possible from an application that uses SQL ServerSQL Server Native Client from a release earlier than SQL Server 2008SQL Server 2008. Entretanto, esse aplicativo poderia consultar exibições de sistema.However, such an application could query system views.
Determinar se uma coluna é uma column_set.Determine if a column is a column_set. Consulte a coluna SS_IS_COLUMN_SET do conjunto de resultados SQLColumns.Consult the SS_IS_COLUMN_SET column of the SQLColumns result set. Ou então, consulte o atributo de coluna específico do SQL ServerSQL Server, SQL_CA_SS_IS_COLUMN_SET (ODBC).Or, consult the SQL ServerSQL Server specific column attribute SQL_CA_SS_IS_COLUMN_SET (ODBC).

Consulte a coluna SS_IS_COLUMN_SET do conjunto de linhas de esquema de DBSCHEMA_COLUMNS.Consult the SS_IS_COLUMN_SET column of the DBSCHEMA_COLUMNS schema rowset. Ou então, consulte dwFlags retornado por icolumnsinfo:: Getcolumninfo ou DBCOLUMNFLAGS no conjunto de linhas retornado por Getcolumnsrowset.Or, consult dwFlags returned by IColumnsinfo::GetColumnInfo or DBCOLUMNFLAGS in the rowset returned by IColumnsRowset::GetColumnsRowset. Para column_set colunas, DBCOLUMNFLAGS_SS_ISCOLUMNSET será definido (OLE DB).For column_set columns, DBCOLUMNFLAGS_SS_ISCOLUMNSET will be set (OLE DB).

Esse cenário não é possível com um aplicativo que usa o SQL ServerSQL Server Native Client de uma versão anterior ao SQL Server 2008SQL Server 2008.This scenario is not possible from an application that uses SQL ServerSQL Server Native Client from a release earlier than SQL Server 2008SQL Server 2008. Entretanto, esse aplicativo poderia consultar exibições de sistema.However, such an application could query system views.
Importar e exportar colunas esparsas por BCP para uma tabela sem nenhum column_set.Import and export of sparse columns by BCP for a table with no column_set. Nenhuma alteração em comportamento de versões anteriores do SQL ServerSQL Server Native Client.No change in behavior from previous versions of SQL ServerSQL Server Native Client.
Importar e exportar colunas esparsas por BCP para uma tabela com um column_set.Import and export of sparse columns by BCP for a table with a column_set. O column_set é importado e exportado da mesma maneira como XML; ou seja, como varbinary (max) se associado como tipo binário ou como nvarchar (max) se associados como uma char ou wchar tipo.The column_set is imported and exported in the same way as XML; that is, as varbinary(max) if bound as a binary type, or as nvarchar(max) if bound as a char or wchar type.

Colunas que são membros de esparso column_set não são exportadas como colunas distintas; elas só são exportadas no valor da column_set.Columns that are members of the sparse column_set are not exported as distinct columns; they are only exported in the value of the column_set.
QUERYOUT comportamento para BCP.queryout behavior for BCP. Nenhuma alteração na manipulação de colunas nomeadas explicitamente de versões anteriores do SQL ServerSQL Server Native Client.No change in the handling of explicitly named columns from previous versions of SQL ServerSQL Server Native Client.

Cenários que envolvem importação e exportação entre tabelas com esquemas diferentes podem exigir manipulação especial.Scenarios involving import and export between tables with different schemas may require special handling.

Para obter mais informações sobre BCP, consulte Suporte de BCP (cópia em massa) a colunas esparsas, mais adiante neste tópico.For more information about BCP, see Bulk Copy (BCP) Support for Sparse Columns, later in this topic.

Comportamento do cliente de versão anteriorDown-Level Client Behavior

Clientes de nível inferior retornarão metadados somente para colunas que não são membros de esparso column_set para SQLColumns e DBSCHMA_COLUMNS.Down-level clients will return metadata only for columns that are not members of the sparse column_set for SQLColumns and DBSCHMA_COLUMNS. As linhas do esquema OLE DB adicionais introduzidas no SQL Server 2008SQL Server 2008 Native Client não estarão disponível, nem as modificações no SQLColumns em ODBC via SQL_SOPT_SS_NAME_SCOPE.The additional OLE DB schema rowsets introduced in SQL Server 2008SQL Server 2008 Native Client will not be available, nor will the modifications to SQLColumns in ODBC via SQL_SOPT_SS_NAME_SCOPE.

Clientes de nível inferior podem acessar as colunas que são membros de esparso column_set por nome e o column_set coluna poderá ser acessada como uma coluna XML para SQL Server 2005SQL Server 2005 os clientes.Down-level clients can access columns that are members of the sparse column_set by name, and the column_set column will be accessible as an XML column to SQL Server 2005SQL Server 2005 clients.

Suporte de BCP (cópia em massa) a colunas esparsasBulk Copy (BCP) Support for Sparse Columns

Não há nenhuma alteração para a API BCP em ODBC ou OLE DB para as colunas esparsas ou column_set recursos.There are no changes to the BCP API in either ODBC or OLE DB for the sparse columns or column_set features.

Se uma tabela tiver um column_set, as colunas esparsas não são tratadas como colunas distintas.If a table has a column_set, sparse columns are not handled as distinct columns. Os valores de todas as colunas esparsas são incluídos no valor da column_set, que é exportado da mesma forma que uma coluna XML; ou seja, como varbinary (max) se associado como tipo binário ou como nvarchar (max) se associados como uma char ou wchar tipo).The values of all sparse columns are included in the value of the column_set, which is exported in the same way as an XML column; that is, as varbinary(max) if bound as a binary type, or as nvarchar(max) if bound as a char or wchar type). Na importação, o column_set valor deve estar de acordo com o esquema do column_set.On import, the column_set value must conform to the schema of the column_set.

Para queryout operações, não há nenhuma alteração na forma como são tratadas as colunas referenciadas explicitamente.For queryout operations, there is no change to the way explicitly referenced columns are handled. column_set colunas têm o mesmo comportamento das colunas XML e dispersão não tem efeito sobre o tratamento de colunas esparsas nomeadas.column_set columns have the same behavior as XML columns and sparseness has no effect on the handling of named sparse columns.

No entanto, se queryout é usado para exportar e fazer referência a colunas esparsas que são membros da coluna esparsa definido por nome, você não pode executar uma importação direta para uma tabela de estrutura semelhante.However, if queryout is used for export and you reference sparse columns that are members of the sparse column set by name, you cannot perform a direct import into a similarly structured table. Isso ocorre porque o BCP usa metadados consistentes com um selecione \* operação para a importação e não pode corresponder column_set colunas de membro com esses metadados.This is because BCP uses metadata consistent with a select \* operation for the import and is unable to match column_set member columns with this metadata. Para importar column_set colunas de membro individualmente, você deve definir uma exibição em uma tabela que faz referência a desejado column_set colunas e você deve executar a operação de importação usando o modo de exibição.To import column_set member columns individually, you must define a view on the table that references the desired column_set columns, and you must perform the import operation using the view.

Consulte tambémSee Also

Programação do SQL Server Native ClientSQL Server Native Client Programming