Share via


Compatibilidad con columnas dispersas en SQL Server Native Client

SQL Server Native Client admite las columnas dispersas. Para obtener más información acerca de las columnas dispersas en SQL Server, vea Usar columnas dispersas y Utilizar conjuntos de columnas.

Para obtener más información acerca de la compatibilidad con columnas dispersas en SQL Server Native Client, vea Compatibilidad con columnas dispersas (ODBC) y Compatibilidad con columnas dispersas (OLE DB).

Para obtener información acerca de las aplicaciones de ejemplo que muestran esta característica, vea Consideraciones para instalar ejemplos y bases de datos de ejemplo de SQL Server.

Escenarios de usuarios de columnas dispersas y SQL Server Native Client

En la tabla siguiente se resumen los escenarios comunes de usuario para los usuarios de SQL Server Native Client con columnas dispersas:

Escenario

Comportamiento

select * from table o bien IOpenRowset::OpenRowset.

Devuelve todas las columnas que no son miembros del column_set disperso, más una columna XML que contiene los valores de todas las columnas no nulas que son miembros del column_set disperso.

Hacer referencia a una columna por nombre.

Se puede hacer referencia a la columna sin tener en cuenta su estado de columna dispersa o la pertenencia a column_set.

Obtener acceso a las columnas miembro de column_set a través de una columna XML calculada.

Se puede obtener acceso a las columnas que son miembros del column_set disperso seleccionando el column_set por nombre y se puede hacer que se inserten y actualicen los valores actualizando el XML de la columna column_set.

El valor debe cumplir el esquema para las columnas column_set.

Recuperar los metadatos de todas las columnas de una tabla mediante SQLColumns con un modelo de búsqueda de columnas de NULL o '%' (ODBC); o mediante el conjunto de filas de esquema DBSCHEMA_COLUMNS sin restricción de columnas (OLE DB).

Devuelve una fila para todas las columnas que no son miembros de column_set. Si la tabla tiene un column_set disperso, se devolverá una fila.

Observe que esto no devuelve los metadatos de las columnas que son miembros de column_set.

Recuperar los metadatos de todas las columnas, independientemente de la dispersión o pertenencia en un column_set. Esto podría devolver un número muy grande de filas.

Establezca el campo de descriptor SQL_SOPT_SS_NAME_SCOPE en SQL_SS_NAME_SCOPE_EXTENDED y llame a SQLColumns (ODBC).

Llame a IDBSchemaRowset::GetRowset para el conjunto de filas de esquema DBSCHEMA_COLUMNS_EXTENDED (OLE DB).

Este escenario no es posible en una aplicación que utiliza SQL Server Native Client en una versión anterior a SQL Server 2008. Sin embargo, este tipo de aplicación podría consultar directamente las vistas del sistema.

Recuperar únicamente los metadatos de las columnas que son miembros de column_set. Esto podría devolver un número muy grande de filas.

Establezca el campo de descriptor SQL_SOPT_SS_NAME_SCOPE en SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET y llame a SQLColumns (ODBC).

Llame a IDBSchemaRowset::GetRowset para el conjunto de filas de esquema DBSCHEMA_SPARSE_COLUMN_SET (OLE DB).

Este escenario no es posible en una aplicación que utiliza SQL Server Native Client en una versión anterior a SQL Server 2008. Sin embargo, este tipo de aplicación podría consultar las vistas del sistema.

Determinar si una columna es dispersa.

Consulte la columna SS_IS_SPARSE del conjunto de resultados SQLColumns (ODBC).

Consulte la columna SS_IS_SPARSE del conjunto de filas de esquema DBSCHEMA_COLUMNS (OLE DB).

Este escenario no es posible en una aplicación que utiliza SQL Server Native Client en una versión anterior a SQL Server 2008. Sin embargo, este tipo de aplicación podría consultar las vistas del sistema.

Determinar si una columna es un column_set.

Consulte la columna SS_IS_COLUMN_SET del conjunto de resultados SQLColumns. O bien, consulte el atributo de columna SQL_CA_SS_IS_COLUMN_SET específico de SQL Server (ODBC).

Consulte la columna SS_IS_COLUMN_SET del conjunto de filas de esquema DBSCHEMA_COLUMNS. O bien, consulte el valor del parámetro dwFlags devuelvo por IColumnsinfo::GetColumnInfo o DBCOLUMNFLAGS del conjunto de filas devuelto por IColumnsRowset::GetColumnsRowset. Para las columnas column_set, se establecerá DBCOLUMNFLAGS_SS_ISCOLUMNSET (OLE DB).

Este escenario no es posible en una aplicación que utiliza SQL Server Native Client en una versión anterior a SQL Server 2008. Sin embargo, este tipo de aplicación podría consultar las vistas del sistema.

Importar y exportar columnas dispersas en BCP de una tabla sin column_set.

Ningún cambio en el comportamiento desde las versiones anteriores de SQL Server Native Client.

Importar y exportar columnas dispersas en BCP de una tabla con column_set.

column_set se importa y exporta de la misma manera que XML; es decir, como varbinary(max) si se enlaza como un tipo binario, o como nvarchar(max) si se enlaza como un tipo char o wchar.

Las columnas que son miembro del column_set disperso no se exportan como columnas distintas; se exportan sólo en el valor del column_set.

Comportamiento de queryout para BCP.

Ningún cambio en el tratamiento de columnas nombradas explícitamente desde las versiones anteriores de SQL Server Native Client.

Los escenarios que implican la importación y exportación entre tablas con esquemas diferentes pueden requerir un tratamiento especial.

Para obtener más información acerca de BCP, vea Compatibilidad de la copia masiva (BCP) con columnas dispersas, más adelante en este tema.

Comportamiento del cliente de nivel inferior

Los clientes de nivel inferior sólo devolverán los metadatos de las columnas que no son miembro del column_set disperso para SQLColumns y DBSCHMA_COLUMNS. Los conjuntos de filas de esquema OLE DB adicionales introducidos en SQL Server 2008 Native Client no estarán disponibles, ni las modificaciones de SQLColumns en ODBC a través de SQL_SOPT_SS_NAME_SCOPE.

Los clientes de nivel inferior tienen acceso a las columnas que son miembros del column_set disperso por nombre y la columna column_set será accesible a los clientes de SQL Server 2005 como una columna XML y a los clientes de SQL Server 2000 como una columna ntext.

Compatibilidad de la copia masiva (BCP) con columnas dispersas

No hay ningún cambio en la API BCP en ODBC u OLE DB para las columnas dispersas o características de column_set.

Si una tabla tiene column_set, las columnas dispersas no se tratan como columnas distintas. Los valores de todas las columnas dispersas están incluidos en el valor de column_set, que se exporta de la misma manera que una columna XML; es decir, como varbinary(max) si se enlaza como un tipo binario, o como nvarchar(max) si se enlaza como un tipo char o wchar. En la importación, el valor de column_set debe cumplir el esquema del column_set.

Para las operaciones queryout, no hay ningún cambio en la manera en que se tratan las columnas a las que se hace referencia. Las columnas column_set tienen el mismo comportamiento que las columnas XML y la dispersión no tiene ningún efecto en el tratamiento de las columnas dispersas indicadas.

Sin embargo, si se utiliza queryout para la exportación y hace referencia a las columnas dispersas que son miembros de la columna dispersa establecida por nombre, no puede realizar una importación directa en una tabla con estructura similar. Esto es porque BCP utiliza los metadatos de forma coherente con una operación select * para la importación y no puede ajustar las columnas miembro de column_set a estos metadatos. Para importar individualmente las columnas miembro de column_set, debe definir una vista en la tabla que haga referencia a las columnas column_set deseadas y debe realizar la operación de importación mediante la vista.