Compartir a través de


Consultar el catálogo del sistema de SQL Server

Las aplicaciones dinámicas que no están codificadas de forma rígida para funcionar con un conjunto específico de tablas y vistas deben disponer de un mecanismo para determinar la estructura y los atributos de los objetos de cualquier base de datos a la que se conectan. Las aplicaciones pueden necesitar información como la siguiente:

  • El número y nombre de las tablas y vistas de una base de datos.

  • El número de columnas de una tabla o vista, junto con el nombre, el tipo de datos, la escala y la precisión de cada columna.

  • Las restricciones definidas en una tabla.

  • Los índices y las claves definidos para una tabla.

El catálogo del sistema proporciona esta información para las bases de datos de SQL Server. El núcleo de los catálogos del sistema de SQL Server es un conjunto de vistas que muestran metadatos que describen los objetos de una instancia de SQL Server. Los metadatos son datos que describen los atributos de los objetos de un sistema. Las aplicaciones basadas en SQL Server pueden tener acceso a la información de los catálogos del sistema utilizando lo siguiente:

  • Vistas de catálogo. Éste es el método de acceso recomendado.

  • Vistas del esquema de información.

  • Conjuntos de filas de esquema OLE DB.

  • Funciones del catálogo de ODBC.

  • Procedimientos almacenados y funciones del sistema.

Las vistas de catálogo proporcionan acceso a los metadatos almacenados en cada base de datos del servidor.

Nota

Las vistas de catálogo no proporcionan acceso a los metadatos de replicación, del Agente SQL Server ni de copias de seguridad.

Se recomienda utilizar las vistas de catálogo para obtener acceso a los metadatos por los motivos siguientes:

  • Todos los metadatos están disponibles como vistas de catálogo.

  • Las vistas de catálogo presentan los metadatos en un formato que es independiente de cualquier implementación de tabla del catálogo, por lo que no se ven afectadas por los cambios de las tablas del catálogo subyacentes.

  • Las vistas de catálogo son la forma más eficaz de obtener acceso a los metadatos del servidor del núcleo.

  • Las vistas de catálogo son la interfaz general con los metadatos del catálogo y la forma más directa de obtener, transformar y presentar formularios personalizados de estos metadatos.

  • Los nombres de las vistas de catálogo y sus columnas son descriptivos. Los resultados de la consulta serán los que puede esperar un usuario con conocimientos moderados de la característica correspondiente a los metadatos consultados.

Por ejemplo, la consulta siguiente utiliza la vista de catálogo sys.objects para devolver todos los objetos de base de datos modificados en los últimos 10 días.

SELECT name AS object_name 
  ,SCHEMA_NAME(schema_id) AS schema_name
  ,type_desc
  ,create_date
  ,modify_date
FROM sys.objects
WHERE modify_date > GETDATE() - 10
ORDER BY modify_date;

Para obtener más ejemplos de consultas al catálogo del sistema mediante las vistas de catálogo, vea Consultar las preguntas más frecuentes (P+F) del catálogo del sistema de SQL Server.

Nota importanteImportante

En versiones futuras de SQL Server, Microsoft puede aumentar la definición de cualquier vista de catálogo del sistema agregando columnas al final de la lista. Se recomienda no usar la sintaxis SELECT * FROM sys.catalog_view_name en código para producción, ya que el número de columnas devueltas podría cambiar y alterar la aplicación.

Vistas del esquema de información

Las vistas del esquema de información se basan en las definiciones del estándar ISO de las vistas de catálogo. Presentan la información del catálogo en un formato que es independiente de cualquier implementación de tabla del catálogo, por lo que no se ven afectadas por los cambios de las tablas del catálogo subyacentes. Las aplicaciones que usan estas vistas son portables entre sistemas de bases de datos heterogéneos compatibles con ISO. Para obtener más información, vea Vistas de esquema de información (Transact-SQL).

Nota

Las vistas del esquema de información no contienen metadatos específicos de SQL Server 2008.

El ejemplo siguiente consulta la vista INFORMATION_SCHEMA.COLUMNS para devolver todas las columnas para la tabla Person en la base de datos AdventureWorks2008R2.

SELECT TABLE_NAME, COLUMN_NAME, COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA + '.' + TABLE_NAME), COLUMN_NAME, 'ColumnID') AS COLUMN_ID
FROM AdventureWorks2008R2.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Person';

Vistas de compatibilidad

Muchas de las tablas del sistema de versiones anteriores de SQL Server se implementan ahora como un conjunto de vistas. Se conocen como vistas de compatibilidad y sólo se proporcionan por compatibilidad con versiones anteriores. Muestran los mismos metadatos que están disponibles en SQL Server 2000. No obstante, no muestran ninguno de los metadatos relacionados con las características incluidas en SQL Server 2005 y versiones posteriores. Por tanto, cuando utilice estas nuevas características, como Service Broker o las particiones, deberá cambiar a la utilización de las vistas de catálogo. Éste es un buen motivo para realizar una actualización a las vistas de catálogo. Otro motivo es que es posible que las columnas de vista de compatibilidad que almacenan los Id. de usuario y tipo devuelvan valores NULL o activen desbordamientos aritméticos. Esto se debe a que, en SQL Server 2005 y versiones posteriores, se pueden crear más de 32.767 usuarios y tipos de datos. Por ejemplo, si desea crear 32.768 usuarios y, a continuación, ejecutar la consulta SELECT * FROM sys.sysusers, si el valor de ARITHABORT es ON, la consulta generará un error de desbordamiento aritmético. Si el valor de ARITHABORT es OFF, la columna uid devolverá valores NULL.

Para evitar estos problemas, se recomienda realizar la actualización a las nuevas vistas de catálogo que pueden procesar ese mayor número de Id. de usuario y tipo.

Conjuntos de filas de esquema OLE DB

La especificación OLE DB define una interfaz IDBSchemaRowset que expone un grupo de conjuntos de filas de esquema que contienen la información del catálogo. Los conjuntos de filas de esquema OLE DB son un método estándar para presentar la información del catálogo admitida por distintos proveedores OLE DB. Los conjuntos de filas son independientes de la estructura de las tablas del catálogo subyacentes. Para obtener más información, vea Compatibilidad con conjuntos de filas de esquema (OLE DB).

El proveedor OLE DB de cliente nativo de Microsoft SQL Server admite una extensión de IDBSchemaRowset que muestra la información del catálogo de los servidores vinculados usados en consultas distribuidas. Para obtener más información, vea Conjunto de filas LINKEDSERVERS (OLE DB).

Funciones del catálogo de ODBC

La especificación ODBC define un conjunto de funciones del catálogo que devuelven conjuntos de resultados que contienen la información del catálogo. Estas funciones constituyen un método estándar para presentar la información del catálogo admitida por los distintos controladores ODBC. Los conjuntos de resultados son independientes de la estructura de las tablas del catálogo subyacentes.

El controlador ODBC de cliente nativo de SQL Server admite dos funciones específicas del controlador que proporcionan información del catálogo de los servidores vinculados usados en consultas distribuidas. Para obtener más información, vea Utilizar funciones de catálogo.

Procedimientos almacenados y funciones del sistema

Transact-SQL define los procedimientos almacenados y las funciones del sistema del servidor que devuelven la información del catálogo. Aunque estos procedimientos almacenados y funciones son específicos de SQL Server, aíslan a los usuarios de la estructura de las tablas del catálogo del sistema subyacentes. Para obtener más información, vea Funciones de metadatos (Transact-SQL) y Procedimientos almacenados del sistema (Transact-SQL).