SQL Server - Cómo generar Diccionario de Datos en SQL Server 2008

 
Vista:
sin imagen de perfil

Cómo generar Diccionario de Datos en SQL Server 2008

Publicado por Fran (5 intervenciones) el 23/02/2017 18:27:40
Hola, tengo un problema con esta consulta, es para un diccionario de datos, pero no veo la forma de insertar las 3 columnas restantes que me piden (FK, PK, DEFAULT) el cual será llenado con un "SI" o un "NO" en caso lo sean o tenga un valor por defecto (haciendo referencia a la clausula DEFAULT)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT
    t.name AS Tabla,
    c.name as Campo,
    tp.name + '(' + CAST(TP.max_length AS VARCHAR) + ')' AS 'Tipo de Campo',
    ep.value as Comentario,
    (CASE
        WHEN c.is_nullable = 0 THEN 'SI'
        WHEN c.is_nullable = 1 THEN 'NO'
    END) AS 'NULL'
 
FROM sys.tables t
    inner join sys.columns c
        on t.OBJECT_ID = c.OBJECT_ID
    inner join sys.types tp
        on c.user_type_id = tp.user_type_id
    left join sys.extended_properties ep
		on (t.object_id=ep.major_id and
			c.object_id=ep.minor_id)
 
where t.name='Mi_Tabla'
ORDER BY T.name, C.name

El otro problema que tengo es que todos registros me arrojan "null" en el campo "comentario", a pesar que la mayoría si lo tiene.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Cómo generar Diccionario de Datos en SQL Server 2008

Publicado por Isaias (4558 intervenciones) el 23/02/2017 19:15:05
Verifica si este codigo te es funcional:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
select a.name [Table],b.name [Attribute],c.name [DataType],b.isnullable [Allow Nulls?],CASE WHEN
d.name is null THEN 0 ELSE 1 END [PKey?],
CASE WHEN e.parent_object_id is null THEN 0 ELSE 1 END [FKey?],CASE WHEN e.parent_object_id
is null THEN '-' ELSE g.name  END [Ref Table],
CASE WHEN h.value is null THEN '-' ELSE h.value END [Description]
from sysobjects as a
join syscolumns as b on a.id = b.id
join systypes as c on b.xtype = c.xtype
left join (SELECT  so.id,sc.colid,sc.name
      FROM    syscolumns sc
      JOIN sysobjects so ON so.id = sc.id
      JOIN sysindexkeys si ON so.id = si.id
                    and sc.colid = si.colid
      WHERE si.indid = 1) d on a.id = d.id and b.colid = d.colid
left join sys.foreign_key_columns as e on a.id = e.parent_object_id and b.colid = e.parent_column_id
left join sys.objects as g on e.referenced_object_id = g.object_id
left join sys.extended_properties as h on a.id = h.major_id and b.colid = h.minor_id
where a.type = 'U' order by a.name
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Cómo generar Diccionario de Datos en SQL Server 2008

Publicado por Fran (5 intervenciones) el 23/02/2017 20:26:44
Hola, gracias por responder, he modificado algunos detalles de tu código, pero me sirvió mucho, pero solo me falta un campo, ¿o me puedes dar una idea?; El campo "DEFAULT" (esa que se define para ser remplazado en caso que se deje como null), que me parece que también es una restricción de campo, disculpa si el código se movió, pero lo reordené para entenderlo mejor.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
select	a.name [ENTIDAD],
		b.name [CAMPOS],
		c.name + '(' + CAST(c.length AS VARCHAR) + ')' AS [TIPO DE DATO],
		case when b.isnullable=0 then 'NO' else 'SI' end [NULL],
		case when d.name is null then '' else 'X' end [PK],
		case when e.parent_object_id is null then '' else 'X' end [FK],
		case when h.value is null then '' else h.value end [DESCRIPCIÓN]
 
from	sysobjects as a
		join syscolumns as b
			on a.id = b.id
		join systypes as c
			on b.xtype = c.xtype
		left join	(SELECT       so.id,
							sc.colid,
							sc.name
					 FROM	syscolumns sc
							join sysobjects so
								on so.id = sc.id
							join sysindexkeys si
								on so.id = si.id and
									sc.colid = si.colid
					 WHERE si.indid = 1) d
 
			on	a.id = d.id and
				b.colid = d.colid
		left join sys.foreign_key_columns as e
			on	a.id = e.parent_object_id and
				b.colid = e.parent_column_id
		left join sys.extended_properties as h
			on	a.id = h.major_id and
				b.colid = h.minor_id
 
where a.type = 'U'
order by a.name
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Cómo generar Diccionario de Datos en SQL Server 2008

Publicado por Isaias (4558 intervenciones) el 23/02/2017 22:43:57
DEFAULT, es una constraint, por lo tanto, deberias unirlo con COLUMNAS

1
2
3
4
SELECT d.definition
FROM sys.default_constraints AS d
INNER JOIN sys.columns AS c
ON d.parent_column_id = c.column_id
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar