Compatibilidad con columnas dispersas en SQL Server Native Client
SQL Server Native Client admite columnas dispersas. Para más información sobre columnas dispersas en SQL Server, consulte Usar columnas dispersas y Usar conjuntos de columnas.
Para obtener más información sobre 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 sobre las aplicaciones de ejemplo que muestran esta característica, vea Ejemplos de programación de datos de SQL Server.
Escenarios de usuarios de columnas dispersas y SQL Server Native Client
En la tabla siguiente se resumen los escenarios de usuario comunes para SQL Server Native Client usuarios con columnas dispersas:
Escenario | Comportamiento |
---|---|
select * from table or 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 metadatos para todas las columnas de una tabla a través de SQLColumns con un patrón de búsqueda de columnas de NULL o '%' (ODBC); o a través del conjunto de filas de esquema de DBSCHEMA_COLUMNS sin ninguna restricción de columna (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 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 de DBSCHEMA_COLUMNS_EXTENDED (OLE DB). Este escenario no es posible desde una aplicación que use SQL Server Native Client de 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 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 de DBSCHEMA_SPARSE_COLUMN_SET (OLE DB). Este escenario no es posible desde una aplicación que use SQL Server Native Client de 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 desde una aplicación que use SQL Server Native Client de 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 SQL Server atributo de columna específico SQL_CA_SS_IS_COLUMN_SET (ODBC). Consulte la columna SS_IS_COLUMN_SET del conjunto de filas de esquema DBSCHEMA_COLUMNS. O bien, consulte dwFlags devuelto por IColumnsinfo::GetColumnInfo o DBCOLUMNFLAGS en el conjunto de filas devuelto por IColumnsRowset::GetColumnsRowset. Para las columnas column_set , se establecerá DBCOLUMNFLAGS_SS_ISCOLUMNSET (OLE DB).Este escenario no es posible desde una aplicación que use SQL Server Native Client de 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 . |
No hay ningún cambio en el comportamiento de 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 enlazase como un tipo binario, o como nvarchar(max) si estuviera enlazado como un char tipo o wchar.Las columnas que son miembro del column_set disperso no se exportan como columnas distintas; se exportan solo en el valor del column_set . |
Comportamiento de queryout para BCP. |
No hay ningún cambio en el control de columnas con nombre explícita de 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 solo devolverán metadatos para las columnas que no son miembros del disperso column_set
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 en SQLColumns en ODBC a través de SQL_SOPT_SS_NAME_SCOPE.
Los clientes de nivel inferior pueden acceder a columnas que son miembros del disperso column_set
por nombre y la column_set
columna será accesible como una columna XML para SQL Server clientes de 2005.
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 se incluyen en el valor de column_set
, que se exporta de la misma manera que una columna XML; es decir, como varbinary(max)
si se enlazase como un tipo binario, o como nvarchar(max)
si estuviera enlazado como un char
tipo 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 de 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 se debe a que BCP usa metadatos coherentes con una operación select * para la importación y no puede coincidir column_set
con las columnas miembro con 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.