Hoy me encontré con una petición bastante inusual (inusual, porque nunca me lo habían pedido antes…). ¿Como obtengo una lista de TODAS las tablas y TODAS las columnas de una Base de Datos?
No fue menor la solicitud. Obtener el listado de todas las columnas de una tabla no es difícil, pero esta Base de Datos tenia cerca de 60 tablas y algunas de estas tablas tienen casi 20 columnas, la tarea se hacía un poco tediosa.
Hasta que se me ocurrió ponerme a cachurear por ahí y encontré las siguientes consultas:
Para Bases de Datos SQL Server 2000
SELECT SO.NAME, SC.NAME
FROM sysobjects SO INNER JOIN syscolumns SC
ON SO.ID = SC.ID
WHERE SO.XTYPE = ‘U’
ORDER BY SO.NAME, SC.NAME
Para Bases de Datos SQL Server 2005
SELECT SO.NAME, SC.NAME
FROM sys.objects SO INNER JOIN sys.columns SC
ON SO.OBJECT_ID = SC.OBJECT_ID
WHERE SO.TYPE = ‘U’
ORDER BY SO.NAME, SC.NAME
Como siempre, sus dudas y comentarios son bienvenidos.
Muchas gracias la versión 2005 funciona perfectamente en la versión 2008.
Saludos
Buen aporte Felipe, en SQL Server 2005 también puedes optar por utilizar la siguiente consulta para obtener las tablas de una base de datos
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
si quieres obtener todas las columnas
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
y si quieres todas las columnas y tablas relacionadas puedes utilizar
SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
Un saludo.
Aporto una consulta para SQL Server 2008 que muestra:
– Tabla
– Columna
– Tipo de dato
– Tamaño del dato
SELECT
so.name AS Tabla,
sc.name AS Columna,
st.name AS Tipo,
sc.max_length AS Tamaño
FROM
sys.objects so INNER JOIN
sys.columns sc ON
so.object_id = sc.object_id INNER JOIN
sys.types st ON
st.system_type_id = sc.system_type_id AND
st.name != ‘sysname’
WHERE
so.type = ‘U’
ORDER BY
so.name,
sc.name
Saludos
@Arturo y @arayo.
Ya probé las sentencias y funcionan perfecto.
Muchas gracias por sus aportes, asi da gusto escribir en un blog!
Probé todas las consultas para SQL 7 y me quedo con este SP que encontré hace tiempo….
Aqui les dejo el SP
—————-SP———————————-
if exists (select * from sysobjects where id = object_id(‘dbo.p_sizetables’) and sysstat & 0xf = 4)
drop procedure dbo.p_sizetables
GO
create procedure dbo.p_sizetables
as
Begin transaction
/**************Procedimiento creado por KM para ver el tamaño de las tablas de una base de datos*/
SET NOCOUNT ON
declare @nombre_tabla varchar(100)
declare @propietario varchar(40)
declare @uid int
declare @nombre_completo varchar(150)
declare @nombre_db varchar(256)
create table #resultados
(nombre varchar(50),
filas decimal(12,0),
reservado varchar(40),
data varchar(40),
tamaño_indice varchar(20),
no_usado varchar(20))
declare tablas cursor
for select a.uid , propietario = left( b.name,40), tabla = a.name from sysobjects a, sysusers b
where type = ‘U’ and a.uid = b.uid order by tabla
select @nombre_db = db_name()
OPEN tablas
FETCH NEXT FROM tablas into @uid, @propietario, @nombre_tabla
WHILE @@FETCH_STATUS = 0
BEGIN
if @uid = 1
begin
insert #resultados
exec sp_spaceused @nombre_tabla
end
else
begin
SET @nombre_completo = rtrim(ltrim(@nombre_db))+’.’ + ltrim(rtrim(@propietario)) +’.’+ @nombre_tabla
insert #resultados
exec sp_spaceused @nombre_completo
end
FETCH NEXT FROM tablas INTO @uid, @propietario, @nombre_tabla
END
CLOSE tablas
DEALLOCATE tablas
select * from #resultados
order by filas desc
Commit Transaction
Gracias Francisco, desgraciadamente no tengo instancias SQL Server 7 para probar el SP.
Muy buen dato Felipe, también Arturo y Arayo.
Ahora, una pequeña consulta de un neófito: Hay alguna herramienta que me permita «documentar» una base de datos de forma «automatizada»?
Saludos
Gonzalo
Gran articulo Felipe!
@gbr: depende un poco de lo que quieras hacer, pero hay herramientas como Erwin que te permitirian hacer ingineria inversa y generar la documentación.
Tambien podrias utilizar las consultas que te dicen y hacer una select for xml….http://www.devjoker.com/contenidos/Tutorial-de-Transact-SQL/244/Select-FOR-XML.aspxy luego transformarla con un xsl…
@Francisco: Ya probé tu SP y funciona perfecto. Gracias!!!
@GBR: Prueba con la consulta que aportó Arturo en Report Builder 2.0, si ademas necesitas el modelo de datos, puedes hacerlo con Visio (yo usé 2010 Beta) y ahi vas generando la documentación.
He probado las consultas con el SQL MOvil en Ipaq y funcionan perfecto. Gracias!!
Excelente sentencia.
muchas gracias me sirvio de mucho
Muchas gracias probe todas las consultas y funcionan perfectamente..
Tengo una duda y disculpen, como puedo obtener las Columnas Calculadas de las Tablas en sql server 2008
Si os encontráis con la necesidad de documentar una BD SQL Server, tenéis distintas posibilidades