SET NOCOUNT ON
DECLARE @NOMBRE_TABLA sysname
DECLARE @iColumna int,@iUltimaColumna int,
@NombreColumna sysname,
@TipoColumna sysname,
@Longitud int
SELECT @NOMBRE_TABLA = MIN(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE= 'BASE TABLE' AND TABLE_NAME!= 'sysdiagrams'
WHILE @NOMBRE_TABLA IS NOT NULL
BEGIN
PRINT '======================' + @NOMBRE_TABLA + ':========================='
SELECT @iColumna = 0, @iUltimaColumna = max(ORDINAL_POSITION) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @NOMBRE_TABLA
WHILE @iColumna < @iUltimaColumna
BEGIN
SELECT @iColumna = min(ORDINAL_POSITION) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @NOMBRE_TABLA and ORDINAL_POSITION > @iColumna;
--
SELECT @NombreColumna = IC.COLUMN_NAME, @TipoColumna = IC.DATA_TYPE,
@Longitud = CASE WHEN CAST(IC.DATA_TYPE AS NVARCHAR) IN ('char','nchar','varchar','nvarchar','text','ntext') THEN IC.CHARACTER_MAXIMUM_LENGTH ELSE NULL END
FROM INFORMATION_SCHEMA.COLUMNS IC
WHERE IC.TABLE_NAME = @NOMBRE_TABLA and IC.ORDINAL_POSITION = @iColumna;
PRINT '. '+ @NombreColumna + ' ' + @TipoColumna + ' ' + ISNULL(CAST(@Longitud AS NVARCHAR(64)),'')
--
END
SELECT @NOMBRE_TABLA= MIN(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME> @NOMBRE_TABLA
AND TABLE_TYPE= 'BASE TABLE' AND TABLE_NAME!= 'sysdiagrams'
END
domingo, 4 de diciembre de 2011
DICCIONARIO DE DATOS CON SQL SERVER
En internet hay varios ejemplos que abordan este tema sin embargo ninguno de ellos me ha terminado de gustar, de manera rapida escribo este script que hace el trabajo que 'por ahora' requiero. En otra oportunidad profundizaré mas en el tema.
Para este ejemplo hago uso basicamente de: INFORMATION_SCHEMA.TABLES para obtener informacion de las tablas de la bd e INFORMATION_SCHEMA.COLUMNS para obtener informacion de cada columna por cada tabla.
Sin mas preambulo aca el script:
Etiquetas:
DICCIONARIO DE DATOS,
INFORMATION_SCHEMA.COLUMNS,
INFORMATION_SCHEMA.TABLES,
SQL SERVER,
while
Suscribirse a:
Comentarios (Atom)