22 noviembre 2012

Buscar un Campo en la base de datos

O mejor, como buscar todos los campos con un nombre en especifico?

Ya sea que la base de datos no la hallamos desarrollado nosotros y tengamos que buscar cierta informacion en ella, o bien que seamos muchos los que hacemos cambios en la base de datos y estemos buscando determinado campo, ya sea que nos interese saber en que tablas se hace referencia a determinado campo o simplemente no recordamos donde dimos de alta un campo en especifico, a veces tenemos que buscar en las tablas.

Hacer esto tabla por tabla es monótono, sujeto a errores y tardado, para ayudarnos con esto nos apoyaremos en las tablas de sistema sys.sysobjects, sys.syscolumns y sys.systypes, en la primera podemos encontrar las tablas que hemos dado de alta, en la segunda los nombres de sus columnas y en la ultima podemos obtener el tipo de dato de la columna, el resto es cuestión de hacer la consulta apropiada, tomando como ejemplo la base de datos Northwind:


SELECT  tbl.name AS [Tabla],
          tbl.xtype,        
        col.name AS [Campo] ,
        sys.systypes.name AS [Tipo de Dato]
FROM    sys.sysobjects tbl
        INNER JOIN sys.syscolumns col ON 
                tbl.id = col.id
        INNER JOIN sys.systypes ON 
                col.xtype = sys.systypes.xusertype
WHERE   col.name LIKE '%Category%' AND
        tbl.xtype IN ('U','V')
ORDER BY tbl.xtype, tbl.name , col.name



Esto nos retornara la siguiente informacion:

Tabla xtype Campo Tipo de Dato
Categories CategoryID int
Categories CategoryName nvarchar
Products CategoryID int
Alphabetical list of products CategoryID int
Alphabetical list of products CategoryName nvarchar
Category Sales for 1997 CategoryName nvarchar
Category Sales for 1997 CategorySales money
Product Sales for 1997 CategoryName nvarchar
Products by Category CategoryName nvarchar
Sales by Category CategoryID int
Sales by Category CategoryName nvarchar



En esta consulta obtenemos todas las tablas de usuario y vistas que contienen un campo cuyo nombre tiene la palabra Category como parte de el.

Poniéndole un poco de imaginación esta consulta nos puede servir para otras cosas que no sean simplemente buscar campos, por ejemplo, hace tiempo tuve que cambiar todos los tipos de datos FLOAT por DECIMAL, basándome en esta consulta arme un cursor que recorría todos los campos de ese tiempo armando un ALTER TABLE y ejecutándolo, ahorrándome así bastante tiempo.

Espero te sirva la información.