Published on

September 1, 2024

Explorando los metadatos de SQL Server con sys.objects

Cuando trabajas con SQL Server, es importante tener un buen entendimiento de los metadatos en tu base de datos. Una forma de acceder a estos metadatos es a través de la vista sys.objects. En este artículo, exploraremos la vista sys.objects y discutiremos cómo se puede utilizar para abordar varios problemas utilizando habilidades básicas de T-SQL.

¿Qué es sys.objects?

La vista sys.objects es una vista del sistema en SQL Server que proporciona metadatos sobre objetos con ámbito de esquema en una base de datos. Contiene una fila por cada objeto en la base de datos e incluye información como el nombre del objeto, el esquema, el tipo, la fecha de creación y la fecha de modificación.

A diferencia de las vistas más genéricas de INFORMATION_SCHEMA, sys.objects proporciona metadatos más detallados y permite combinar múltiples vistas del sistema en procedimientos almacenados y vistas de usuario. Además, las consultas basadas en sys.objects se ejecutan más rápidamente en SQL Server porque se basan en tablas internas del sistema.

Consultando sys.objects

Para consultar la vista sys.objects, puedes utilizar una simple instrucción SELECT. Por ejemplo, para listar todos los objetos en una base de datos, puedes utilizar la siguiente consulta:

SELECT * FROM nombre_de_la_base_de_datos.sys.objects;

Reemplaza “nombre_de_la_base_de_datos” con el nombre de la base de datos que deseas consultar.

También puedes establecer una base de datos predeterminada utilizando la instrucción USE en SQL Server Management Studio. Esto te permite omitir el nombre de la base de datos en tus consultas. Aquí tienes un ejemplo:

USE nombre_de_la_base_de_datos;
SELECT * FROM sys.objects;

Este enfoque puede ser útil cuando trabajas frecuentemente con una base de datos específica.

Utilizando las funciones object_id y object_name

Además de consultar sys.objects, puedes utilizar las funciones object_id y object_name para recuperar los valores object_id y object_name de un objeto específico de SQL Server. La función object_id devuelve el valor object_id dado el nombre del objeto, mientras que la función object_name devuelve el valor object_name dado el object_id.

Aquí tienes un ejemplo de cómo utilizar estas funciones:

DECLARE @mi_nombre_de_objeto VARCHAR(50);
DECLARE @mi_object_id INT;

SET @mi_nombre_de_objeto = 'dbo.symbol_date';

SELECT object_id('dbo.symbol_date') AS [object_id desde constante de cadena];
SELECT object_id(@mi_nombre_de_objeto) AS [object_id desde variable local];

SET @mi_object_id = (SELECT object_id(@mi_nombre_de_objeto));

SELECT object_id('dbo.symbol_date') AS [object_id desde constante de cadena],
       object_name(1527728545) AS [object_name desde valor entero];
SELECT object_id(@mi_nombre_de_objeto) AS [object_id desde variable local],
       object_name(@mi_object_id) AS [object_name desde variable local];

Estas funciones pueden ser útiles cuando necesitas recuperar el object_id o object_name de un objeto específico en tu base de datos.

Explorando los tipos de objetos con sys.objects

La vista sys.objects realiza un seguimiento de varios tipos de objetos en SQL Server. Puedes utilizar sys.objects para descubrir los diferentes tipos de objetos en tu base de datos. La lista completa de tipos de objetos rastreados se puede encontrar en la documentación de Microsoft.

Aquí tienes un ejemplo de cómo consultar y mostrar los tipos de objetos en una base de datos:

USE nombre_de_la_base_de_datos;

-- Mostrar todos los tipos de objetos distintos en la base de datos
SELECT DISTINCT type, type_desc FROM sys.objects;

-- Mostrar un subconjunto de tipos de objetos en la base de datos
SELECT DISTINCT type, type_desc FROM sys.objects
WHERE type IN ('fn', 'f', 'u', 'pk', 'p');

Esto te dará una lista de los tipos de objetos distintos en la base de datos especificada. Puedes personalizar la consulta incluyendo o excluyendo tipos de objetos específicos según tus necesidades.

Comprendiendo las relaciones padre-hijo

La columna parent_object_id en sys.objects se puede utilizar para identificar relaciones padre-hijo entre objetos de metadatos. Por ejemplo, un objeto de clave primaria es un hijo del objeto de tabla al que pertenece. Al examinar los valores de parent_object_id, puedes determinar si una tabla tiene una clave primaria o no.

Aquí tienes un ejemplo de cómo consultar y mostrar relaciones padre-hijo utilizando sys.objects:

USE nombre_de_la_base_de_datos;

-- Enumerar todas las tablas en la base de datos
SELECT object_id, name, schema_name(schema_id) AS schema_name
FROM sys.tables
ORDER BY name;

-- Enumerar nombres de todas las claves primarias en la base de datos
SELECT object_id, type_desc, name, parent_object_id
FROM sys.objects
WHERE type = 'pk';

-- Enumerar tablas con una clave primaria
SELECT object_id, name, schema_name(schema_id) AS schema_name
FROM sys.tables
WHERE object_id IN (
    SELECT parent_object_id
    FROM sys.objects
    WHERE type = 'pk'
);

-- Enumerar tablas sin una clave primaria
SELECT object_id, name, schema_name(schema_id) AS schema_name
FROM sys.tables
WHERE object_id NOT IN (
    SELECT parent_object_id
    FROM sys.objects
    WHERE type = 'pk'
);

Esto te proporcionará información sobre las tablas con y sin claves primarias en la base de datos especificada.

Conclusión

La vista sys.objects es una herramienta poderosa para explorar y consultar metadatos en SQL Server. Al entender cómo utilizar sys.objects y las funciones relacionadas, puedes obtener información valiosa sobre la estructura y las relaciones de tu base de datos. Ya sea que necesites recuperar información de objetos, explorar tipos de objetos o analizar relaciones padre-hijo, sys.objects es un recurso valioso para cualquier desarrollador o administrador de SQL Server.

Recuerda consultar la documentación de Microsoft para obtener información más detallada sobre sys.objects y sus vistas relacionadas.

Última actualización del artículo: 2023-12-20

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.