2009-09-18 13 views
6

Hay una secuencia de comandos t-sql para encontrar tablas que no están siendo utilizadas en el servidor sql por procudios almacenados, vistas, funciones, etc. Tengo una base de datos que tiene cientos de tablas, si no más y antes de ir a caer tablas, quería saber si había una secuencia de comandos que podría ir a través de cada objeto en la base de datos y decirme si alguna tabla está en uso.script tsql para encontrar tablas que no estén siendo utilizadas por procedimientos almacenados, vistas, funciones, etc.

+0

¿Cuál es la tabla que "no se está utilizando"? ¿Te refieres a tablas vacías? –

+0

No, me refiero a tablas que no se utilizan en procedimientos almacenados, vistas, funciones, etc. Supongamos que creé una base de datos hace un tiempo y tiene cientos de tablas y algunas se han vuelto obsoletas, pero no estoy seguro, así que antes ve a empezar a tirar tablas, quiero averiguar si están en uso. No entiendo por qué esta pregunta fue votada, parece una pregunta muy válida y sensata. – Xaisoft

+0

Tal vez cambie el título de "secuencia de comandos T-SQL para encontrar tablas a las que no hacen referencia los procedimientos almacenados, las vistas y las funciones". – shufler

Respuesta

8

Si desea utilizar un script, here (Listing SQL Server Object Dependencies) es un muy buen artículo sobre cómo crear secuencias de comandos de dependencias. Utilizando eso, puede hacer una lista de tablas a las que se hace referencia. Tiene la lista de tablas que están en su base de datos, para que sepa cuáles de ellas no se están utilizando.

En el artículo utilizan

sp_depends
procedimiento almacenado. Sin embargo, tiene una falla. Por ejemplo, si tiene un procedimiento almacenado que utilizó la tabla "MyTable" y crea el procedimiento antes de crear la tabla "MyTable", no verá esto en la lista de dependencias. Es por eso que debe buscar en la tabla
syscomments
para encontrar dependencias. Pero esto tampoco es exacto, porque si tiene el nombre de la tabla en el comentario, lo tratará como una dependencia.

4

Si está utilizando Management Studio, puede hacer clic derecho en una tabla y ver las dependencias.

Y aquí es un enlace a un artículo sobre cómo hacer esto en tsql, que supongo es lo que está buscando:

https://web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/datacenter/?p=277

Siempre se puede construir una tabla temporal/var con todas las tablas que tienen dependencias, y compararlo con todas las tablas para ver qué no tiene ninguna dependencia.

8

Por lo que yo sé, no se puede confiar realmente en la administración de dependencias de SQL Server. Lukasz señaló uno de los muchos problemas.

En 2005, el equivalente de la tabla de syscomments anterior es sys.sql_modules.

Para buscar todos los nombres de tabla que no se producen en el código TSQL (vistas, SPS, funciones), utilice esta declaración:

select t.name, sys.objects.name foundin, sys.objects.type_desc 
from sys.objects t 
left outer join 
    sys.sql_modules 
    inner join sys.objects on sys.objects.object_id = sys.sql_modules.object_id 
on sys.sql_modules.definition like '%' + t.name + '%' 
where t.type = 'U' 
and sys.objects.name is null 
order by t.name, type_desc, foundin 

Si en comentario la línea con la condición IS NULL, a encontrar todos ocurrencias de todos los nombres de tabla en el código TSQL. (no importa si el nombre de la tabla realmente se refiere a esa tabla)

+0

probaré esto y le contaré cómo funciona. – Xaisoft

+0

+1 Estaba buscando una forma de encontrar referencias de tablas en vistas/procedimientos y con pequeñas modificaciones esto funciona perfectamente para eso. –

+0

Esto funciona bastante bien para los procedimientos almacenados pero es necesario relajar la restricción t.type = 'U' para t.type IN ('U', 'P') – Roman

Cuestiones relacionadas