Referencias entre tablas

21/07/2006 - 14:52 por solusoft | Informe spam
A partir de una tabla (su nombre), sus campos clave (nombres) y valores para
esos campos clave( que identificarían un registro) se quiere acceder a todas
las tablas relacionadas, directa o indirectamente, en relación 1 a muchos.
Obtendríamos un árbol de dependencias, y así se podría recorrer en amplitud.



Como veis en el ER-WIN, a partir de la tabla GCL_MSTR_PRESUPUESTO tendríamos
esta estructura:



GCL_MSTR_PRESUPUESTO

GCL_VERS_PRESUPUESTO

GCL_CONCEP_PRES

GCL_INFO_EXT_PRESUP

CGL_LINE_PRESUP

GCL_CONCEP_LINE

GCL_INFO_EXT_LINE_PRESUP

GCL_APARATO

GCL_CLI_PRESUP

GCL_INFO_EXT_CLI_PRESUP

GCL_ST_CLI_PRESUP



Digamos que a partir de una tabla, miro la relación y voy pasando a la tabla
que tiene el “punto”.



Hay que acceder al schema y ver las dependencias de cada tabla, podéis
orientarme para poder conseguir si una tabla se relaciona 1 a muchos con ora
tabla. Obtener las primary keys ya sé, también tendría que saber acceder a
las FK de una tabla - sabiendo que hay varios niveles de relación-


Encontré este script, gracias a S.Ramos, pero sólo me fu nciona con las
tablas de primer nivel, GCL_MSTR_PRESUPUESTO si me funciona pero para las
otras no.

SELECT s_1.name AS FK_Name, ccu.COLUMN_NAME AS Column_Name, s_2.name AS
Detail_Name, s_3.name AS Header_Name,

sc.colid AS Position

FROM sysobjects s_1 INNER JOIN sysreferences r ON s_1.id = r.constid

INNER JOIN sysobjects s_2 ON s_2.id = r.fkeyid

INNER JOIN sysobjects s_3 ON s_3.id = r.rkeyid

INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu ON
ccu.CONSTRAINT_NAME = s_1.name

INNER JOIN syscolumns sc ON sc.name = ccu.COLUMN_NAME AND sc.id = s_2.id

Un saludo y perdón por las molestías.

PD: Les puedo enviar parte del modelo de datos si les aclara mejor
relaciones entre tablas
 

Leer las respuestas

#1 Alejandro Mesa
21/07/2006 - 15:03 | Informe spam
solusoft,

Si estas usando SQL Server 2000, entonces tendras que usar una solucion
procedural para recorrer la jerarquia. Ve el topico "Expanding Hierarchies"
en los libros en linea.

How to show expanding hierarchies by using SQL Server
http://support.microsoft.com/defaul...us;q248915

Si estas usando SQL Server 2005, entonces podras usar una CTE recursiva,
pero las tablas y/o vistas de sistema que almacenan la informacion sobre la
estructura de las tablas han cambiado.

Recursive Queries Using Common Table Expressions
http://msdn2.microsoft.com/en-us/li...86243.aspx

Object Catalog Views (Transact-SQL)
http://msdn2.microsoft.com/en-us/li...89783.aspx

Information Schema Views (Transact-SQL)
http://msdn2.microsoft.com/en-us/li...86778.aspx


AMB

"solusoft" wrote:

A partir de una tabla (su nombre), sus campos clave (nombres) y valores para
esos campos clave( que identificarían un registro) se quiere acceder a todas
las tablas relacionadas, directa o indirectamente, en relación 1 a muchos.
Obtendríamos un árbol de dependencias, y así se podría recorrer en amplitud.



Como veis en el ER-WIN, a partir de la tabla GCL_MSTR_PRESUPUESTO tendríamos
esta estructura:



GCL_MSTR_PRESUPUESTO

GCL_VERS_PRESUPUESTO

GCL_CONCEP_PRES

GCL_INFO_EXT_PRESUP

CGL_LINE_PRESUP

GCL_CONCEP_LINE

GCL_INFO_EXT_LINE_PRESUP

GCL_APARATO

GCL_CLI_PRESUP

GCL_INFO_EXT_CLI_PRESUP

GCL_ST_CLI_PRESUP



Digamos que a partir de una tabla, miro la relación y voy pasando a la tabla
que tiene el “punto”.



Hay que acceder al schema y ver las dependencias de cada tabla, podéis
orientarme para poder conseguir si una tabla se relaciona 1 a muchos con ora
tabla. Obtener las primary keys ya sé, también tendría que saber acceder a
las FK de una tabla - sabiendo que hay varios niveles de relación-


Encontré este script, gracias a S.Ramos, pero sólo me fu nciona con las
tablas de primer nivel, GCL_MSTR_PRESUPUESTO si me funciona pero para las
otras no.

SELECT s_1.name AS FK_Name, ccu.COLUMN_NAME AS Column_Name, s_2.name AS
Detail_Name, s_3.name AS Header_Name,

sc.colid AS Position

FROM sysobjects s_1 INNER JOIN sysreferences r ON s_1.id = r.constid

INNER JOIN sysobjects s_2 ON s_2.id = r.fkeyid

INNER JOIN sysobjects s_3 ON s_3.id = r.rkeyid

INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu ON
ccu.CONSTRAINT_NAME = s_1.name

INNER JOIN syscolumns sc ON sc.name = ccu.COLUMN_NAME AND sc.id = s_2.id

Un saludo y perdón por las molestías.

PD: Les puedo enviar parte del modelo de datos si les aclara mejor
relaciones entre tablas

Preguntas similares