SQL Server - Restricciones FK de una tabla

   
Vista:

Restricciones FK de una tabla

Publicado por Leonardo (79 intervenciones) el 11/04/2008 17:09:24
Buenos días a todos los foristas... espero me puedan ayudar:

Sé que en la tabla de sistema sysobjects se guarda (entre muchas otras cosas) un registro por cada una de las restricciones de llave foranea que existen en la base de datos. Estas están identificadas con el tipo 'F'.

Quisiera saber si es posible a partir de esta información obtener las dos tablas que están involucradas en la rescricción así como sus respectivos campos involucrados para obtener una consulta parecida a esto:

Tipo Tabla1 Campo1 Tabla2 Campo2
----------------------------------------------------------------------------------------------------------------------------
FK Municipios id_Entidad Entidades id_Entidad
FK Detalle_Factura id_Factura Facturas id_Factura
FK Facturas id_Cliente Clientes id_Cliente

Estoy utilizando SQL Server 2000.

De antemano muchas gracias y espero su valiosa ayuda.

Leo
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

RE:Restricciones FK de una tabla

Publicado por Isaias (3308 intervenciones) el 11/04/2008 20:43:26
SELECT
FK_Table = FK.TABLE_NAME,
FK_Column = CU.COLUMN_NAME,
PK_Table = PK.TABLE_NAME,
PK_Column = PT.COLUMN_NAME,
Constraint_Name = C.CONSTRAINT_NAME
FROM
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK
ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK
ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN
(
SELECT
i1.TABLE_NAME, i2.COLUMN_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
INNER JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2
ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
) PT
ON PT.TABLE_NAME = PK.TABLE_NAME
-- optional:
ORDER BY
1,2,3,4
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

RE:Restricciones FK de una tabla

Publicado por Leonardo (79 intervenciones) el 11/04/2008 20:57:15
Hola Isaías, muchas gracias por responder. Probé tu query y por alguna extraña razón no me estába arojando todas las relaciones entre tablas... Chequé directamente en la base de datos y hay un caso en donde dos tablas que tienen distinto propietario están relacionadas... Esta relación no aparece con la consulta que estás proponiendo.

En otro foro encontré la respuesta, el query resultante para SQL SERVER 2000 es el siguiente:

select 'FK', o1.name as [FKName], o2.name [FKeyTable], c1.name, o3.name, c2.name
from sysforeignkeys fk
join sysobjects o1 on fk.constid = o1.id
join sysobjects o2 on fk.fkeyid = o2.id
join sysobjects o3 on fk.rkeyid = o3.id
join syscolumns c1 on fk.fkey = c1.colid and fk.fkeyid = c1.id
join syscolumns c2 on fk.rkey = c2.colid and fk.rkeyid = c2.id
order by 4

Probé esta consulta y aquí si me arrojan todas las relaciónes. Nuevamente muchas gracias por tomarte la molestia en contestar y seguimos en linea.

La referencia para la respuesta es:

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3161712&SiteID=1&mode=1

Saludos desde México
Leo.
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

RE:Restricciones FK de una tabla

Publicado por Isaias (3308 intervenciones) el 12/04/2008 16:57:28
Si, gracias, ya te he contestado en otro foro y gracias por compartir tu solucion
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